From a14b49e59e6764b6b7764ee3bc95d0d049bf21f8 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Wed, 13 May 2015 22:57:53 +0200 Subject: Turned javascript into coffeescript --- gulpfile.js | 10 +++++-- package.json | 1 + src/js/Botleagues.coffee | 54 +++++++++++++++++++++++++++++++++++ src/js/Botleagues.js | 61 ---------------------------------------- src/js/BotleaguesCallback.coffee | 52 ++++++++++++++++++++++++++++++++++ src/js/BotleaguesCallback.js | 52 ---------------------------------- src/js/BotleaguesFrontend.coffee | 42 +++++++++++++++++++++++++++ src/js/BotleaguesFrontend.js | 37 ------------------------ src/js/forms.coffee | 25 ++++++++++++++++ src/js/forms.js | 22 --------------- src/js/main.coffee | 29 +++++++++++++++++++ src/js/main.js | 27 ------------------ src/js/profile.coffee | 15 ++++++++++ src/js/profile.js | 14 --------- 14 files changed, 226 insertions(+), 215 deletions(-) create mode 100644 src/js/Botleagues.coffee delete mode 100644 src/js/Botleagues.js create mode 100644 src/js/BotleaguesCallback.coffee delete mode 100644 src/js/BotleaguesCallback.js create mode 100644 src/js/BotleaguesFrontend.coffee delete mode 100644 src/js/BotleaguesFrontend.js create mode 100644 src/js/forms.coffee delete mode 100644 src/js/forms.js create mode 100644 src/js/main.coffee delete mode 100644 src/js/main.js create mode 100644 src/js/profile.coffee delete mode 100644 src/js/profile.js diff --git a/gulpfile.js b/gulpfile.js index 96768e7..4a0dff1 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,6 +2,7 @@ var gulp = require('gulp'), changed = require('gulp-changed'), + coffee = require('gulp-coffee'), concat = require('gulp-concat'), debug = require('gulp-debug'), foreach = require('gulp-foreach'), @@ -153,11 +154,16 @@ gulp.task('3rd-party-scripts', function(){ }); gulp.task('scripts', function(){ - var src = './src/js/*.js'; + var src = [ + './src/js/*.js', + './src/js/*.coffee' + ] + ; var dst = './build/assets/js'; return gulp.src(src) - .pipe(changed(dst)) + .pipe(changed(dst, { extension: 'js' })) + .pipe(gulpif(/\.coffee$/, coffee())) .pipe(gulpif(production, stripdebug())) .pipe(gulpif(production, uglify())) .pipe(gulp.dest(dst)); diff --git a/package.json b/package.json index d5c122a..61bf2fe 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "gulp": "^3.8.11", "gulp-autoprefixer": "^2.1.0", "gulp-changed": "~1.2.1", + "gulp-coffee": "~2.3.1", "gulp-concat": "~2.5.2", "gulp-debug": "^2.0.0", "gulp-foreach": "^0.1.0", 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 35c8c0d..0000000 --- a/src/js/Botleagues.js +++ /dev/null @@ -1,61 +0,0 @@ -function Botleagues(){} - -Botleagues.url = 'https://api.local.botleagues.camilstaps.nl'; - -$.cookie.json = true; -Botleagues.cookie_login_email = 'botleagues_login_email'; -Botleagues.cookie_login_user_id = 'botleagues_login_user_id'; -Botleagues.cookie_login_token = 'botleagues_login_token'; -Botleagues.cookie_login_valid_till = 'botleagues_login_valid_till'; - -Botleagues.request = function(user_options) { - var callback = user_options.callback; - - var options = { - endpoint: null, - method: 'GET', - dataType: 'json', - complete: function(data) { - callback(data.responseJSON); - } - }; - - var url = Botleagues.url + '/' + user_options['endpoint']; - delete user_options['callback']; - delete user_options['endpoint']; - - for (var name in user_options) { - options[name] = user_options[name]; - } - - jQuery.ajax(url, options); -}; - -Botleagues.redirect = function(user_options) { - window.location = Botleagues.url + '/' + user_options['endpoint']; -}; - -Botleagues.login = function(email, password) { - Botleagues.request({ - endpoint: 'user_token', - method: 'POST', - callback: BotleaguesCallback.login, - headers: { - 'Authorization': 'Basic ' + btoa(email + ':' + password) - } - }); - - $.cookie(Botleagues.cookie_login_email, email); -}; - -Botleagues.logout = function(){ - Botleagues.clearLoginCookies(); - window.location = '/'; -}; - -Botleagues.clearLoginCookies = function() { - $.removeCookie(Botleagues.cookie_login_email); - $.removeCookie(Botleagues.cookie_login_user_id); - $.removeCookie(Botleagues.cookie_login_token); - $.removeCookie(Botleagues.cookie_login_valid_till); -}; \ 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( + $ '' + .addClass 'glyphicon glyphicon-remove form-control-feedback' + .attr 'aria-hidden', true + ) + .find 'label' + .append( + $ '' + .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 ff99225..0000000 --- a/src/js/BotleaguesCallback.js +++ /dev/null @@ -1,52 +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( - $('') - .addClass('glyphicon glyphicon-remove form-control-feedback') - .attr('aria-hidden', true) - ) - .find('label') - .append( - $('') - .addClass('pull-right text-danger') - .text(error_msg) - ); - } - } - } -}; - -BotleaguesCallback.login = function(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(function(){ window.location = '/profile'; }, 1000); - } else { - BotleaguesFrontend.error({ - message: data.error ? data.error : "Could not login." - }); - $.removeCookie(Botleagues.cookie_login_email); - } -}; \ 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 = '
' + if options.dismissable + html += '×' + html += options.message + html += '
' + + 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 ebc71f2..0000000 --- a/src/js/BotleaguesFrontend.js +++ /dev/null @@ -1,37 +0,0 @@ -function BotleaguesFrontend(){} - -BotleaguesFrontend.message = function(user_options) { - options = { - dismissable: true, - prepend_to: $('#messages'), - type: 'info' - }; - for (var key in user_options) { - options[key] = user_options[key]; - } - - var html = '
'; - if (options.dismissable === true) - html += '×'; - html += options.message; - html += '
'; - - html = $(html); - - html.hide().prependTo(options.prepend_to).slideDown().delay(3000).fadeOut().queue(html.remove); -}; - -BotleaguesFrontend.danger = BotleaguesFrontend.error = function(user_options) { - user_options.type = 'danger'; - return BotleaguesFrontend.message(user_options); -}; - -BotleaguesFrontend.success = function(user_options) { - user_options.type = 'success'; - return BotleaguesFrontend.message(user_options); -}; - -BotleaguesFrontend.warning = function(user_options) { - user_options.type = 'warning'; - return BotleaguesFrontend.message(user_options); -}; \ No newline at end of file diff --git a/src/js/forms.coffee b/src/js/forms.coffee new file mode 100644 index 0000000..e742160 --- /dev/null +++ b/src/js/forms.coffee @@ -0,0 +1,25 @@ +# 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 + + event.preventDefault() + + return + +# Show login form on click +$('.btn-botleagues-login').focus -> + $('#login-block').slideDown() + $('#login-email').focus() + return + +# Request API for logging in +$('#login-form').submit -> + Botleagues.login $('#login-email').val(), $('#login-password').val() + event.preventDefault() + return \ No newline at end of file diff --git a/src/js/forms.js b/src/js/forms.js deleted file mode 100644 index 8a58b2d..0000000 --- a/src/js/forms.js +++ /dev/null @@ -1,22 +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() - }, - callback: BotleaguesCallback.register - }); - - event.preventDefault(); -}); - -$('.btn-botleagues-login').focus(function(){ - $('#login-block').slideDown(); - $('#login-email').focus(); -}); -$('#login-form').submit(function(){ - Botleagues.login($('#login-email').val(), $('#login-password').val()); - 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..4bf9c20 --- /dev/null +++ b/src/js/main.coffee @@ -0,0 +1,29 @@ +$ -> + # 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 = $('
  • ').append( + $('') + .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/main.js b/src/js/main.js deleted file mode 100644 index 5d17e02..0000000 --- a/src/js/main.js +++ /dev/null @@ -1,27 +0,0 @@ -$(document).ready(function(){ - - // Show profile link instead of login if user is logged in - var email = $.cookie(Botleagues.cookie_login_email); - if (typeof email != 'undefined' && $.cookie(Botleagues.cookie_login_valid_till) > (new Date()).getTime()) { - setupLoginMenu(); - } -}); - -function setupLoginMenu() { - $('#nav .login-link').remove(); - - var extra_links = {'Leagues': '/leagues', 'My Bots': '/profile/bots', 'Profile': '/profile', 'Logout': '/logout'}; - - for (var text in extra_links) { - var li = $('
  • ').append( - $('') - .attr('role', 'presentation') - .attr('title', text) - .attr('href', extra_links[text]) - .text(text)); - if (extra_links[text] == selected_page) { // selected_page is added in layout-main.jade - li.addClass('active'); - } - li.appendTo($('#nav')); - } -} \ No newline at end of file diff --git a/src/js/profile.coffee b/src/js/profile.coffee new file mode 100644 index 0000000..33d171b --- /dev/null +++ b/src/js/profile.coffee @@ -0,0 +1,15 @@ +$ -> + # 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( + $('') + .attr('id', 'banner-email') + .addClass('text-muted') + .text(' / ' + $.cookie(Botleagues.cookie_login_email)) + ) + return \ No newline at end of file diff --git a/src/js/profile.js b/src/js/profile.js deleted file mode 100644 index f27e562..0000000 --- a/src/js/profile.js +++ /dev/null @@ -1,14 +0,0 @@ -$(document).ready(function(){ - setupGreeter(); -}); - -function setupGreeter() { - $('.jumbotron .lead').append(' ' + $.cookie(Botleagues.cookie_login_email)); - - $('.header h3').append( - $('') - .attr('id', 'banner-email') - .addClass('text-muted') - .text(' / ' + $.cookie(Botleagues.cookie_login_email)) - ); -} \ No newline at end of file -- cgit v1.2.3