Add initial version of register with validation.

stable
Andrey Antukh 2014-06-25 16:30:00 +02:00
parent ec789ce7db
commit 21c8e24eca
12 changed files with 168 additions and 17 deletions

View File

@ -26,6 +26,7 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $compil
$routeProvider.when("/project/:pslug/taskboard/:id", {templateUrl: "/partials/taskboard.html"})
$routeProvider.when("/login", {templateUrl: "/partials/login.html"})
$routeProvider.when("/register", {templateUrl: "/partials/register.html"})
$routeProvider.otherwise({redirectTo: '/login'})
$locationProvider.html5Mode(true)

View File

@ -54,6 +54,15 @@ class AuthService extends taiga.Service
getToken: ->
return @storage.get("token")
isAuthenticated: ->
if @.getUser() != null
return true
return false
###################
## Http interface
###################
login: (username, password) ->
url = @urls.resolve("auth")
@ -69,10 +78,46 @@ class AuthService extends taiga.Service
@.setUser(user)
return user
isAuthenticated: ->
if @.getUser() != null
return true
return false
publicRegister: (data) ->
url = @urls.resolve("auth-register")
data = _.clone(data, false)
data.type = "public"
return @http.post(url, data).then (response) =>
user = @model.make_model("users", response.data)
@.setToken(user.auth_token)
@.setUser(user)
return user
# acceptInvitiationWithNewUser: (username, email, password, token) ->
# url = @urls.resolve("auth-register")
# data = _.extend(data, {
# username: username,
# password: password,
# token: token
# email: email
# existing: "off"
# }
# return @http.post(url, data).then (response) =>
# user = @model.make_model("users", response.data)
# @.setToken(user.auth_token)
# @.setUser(user)
# return user
# acceptInvitiationWithExistingUser: (username, password, token) ->
# url = @urls.resolve("auth-register")
# data = _.extend(data, {
# username: username,
# password: password,
# token: token,
# existing: "on"
# }
# return @http.post(url, data).then (response) =>
# user = @model.make_model("users", response.data)
# @.setToken(user.auth_token)
# @.setUser(user)
# return user
class AuthController extends taiga.Controller
@ -87,6 +132,36 @@ class AuthController extends taiga.Controller
@location.path("/project/project-example-0/backlog")
RegisterDirective = ($auth, $confirm) ->
link = ($scope, $el, $attrs) ->
$scope.data = {}
form = $el.find("form").checksley()
submit = ->
if not form.validate()
return
promise = $auth.publicRegister($scope.data)
promise.then (response) ->
# TODO: finish this.
console.log response
promise.then null, (response) ->
if response.data._error_message
$confirm.error(response.data._error_message)
$el.on "submit", (event) ->
event.preventDefault()
submit()
$el.on "click", "a.button-register", (event) ->
event.preventDefault()
submit()
return {link:link}
module = angular.module("taigaAuth", ["taigaResources"])
module.service("$tgAuth", AuthService)
module.controller("AuthController", AuthController)
module.directive("tgRegister", ["$tgAuth", "$tgConfirm", RegisterDirective])

View File

@ -25,14 +25,17 @@ class ConfirmService extends taiga.Service
@.$inject = ["$q"]
constructor: (@q) ->
@.el = angular.element(".lightbox_confirm-delete")
_.bindAll(@)
hide: ->
if @.el
@.el.addClass("hidden")
@.el.off(".confirm-dialog")
delete @.el
ask: (title, subtitle) ->
@.el = angular.element(".lightbox_confirm-delete")
# Render content
@.el.find("h2.title").html(title)
@.el.find("span.subtitle").html(subtitle)
@ -52,6 +55,22 @@ class ConfirmService extends taiga.Service
@.el.removeClass("hidden")
return defered.promise
error: (message) ->
@.el = angular.element(".lightbox-generic-error")
# Render content
@.el.find("h2.title").html(message)
defered = @q.defer()
# Assign event handlers
@.el.on "click.confirm-dialog", "a.button-green", (event) =>
event.preventDefault()
defered.resolve()
@.hide()
@.el.removeClass("hidden")
return defered.promise
module = angular.module("taigaBase")
module.service("$tgConfirm", ["$q", ConfirmService])

View File

@ -13,5 +13,7 @@ html(lang="en", ng-app="taiga")
div.master(ng-view="")
div.hidden.lightbox.lightbox_confirm-delete
include partials/views/modules/lightbox_confirm-delete
div.hidden.lightbox.lightbox-generic-error
include partials/views/modules/lightbox-generic-error
script(src="/js/libs.js?v=#{v}")
script(src="/js/app.js?v=#{v}")

View File

@ -17,6 +17,6 @@ block content
a.icon.icon-delete(href="", title="Close message")
include views/modules/login-form
include views/modules/register-form
include views/modules/forgot-form
include views/modules/reset-pass
// include views/modules/register-form
// include views/modules/forgot-form
// include views/modules/reset-pass

View File

@ -0,0 +1,19 @@
extends dummy-layout
//extends login-layout
block head
title Taiga Project management web application with scrum in mind!
block content
div.wrapper(ng-controller="AuthController as ctrl")
div.login-main
div.login-container
h1.logo
img(src="/images/logo.png", alt="TAIGA")
p.tagline Project management web application with scrum in mind!
p.login-error
span.title Ooops! Something went wrong!
span.text According to our Oompa Loompas, your username or password are incorrect.
a.icon.icon-delete(href="", title="Close message")
include views/modules/register-form

View File

@ -0,0 +1,7 @@
a.close(href="", title="close")
span.icon.icon-delete
section
h2.title
div.delete-options
a.button.button-green(href="", title="Accept")
span Accept

View File

@ -1,5 +1,5 @@
div.login-form-container
form.login-form
form.login-form(ng-submit="ctrl.submit()")
fieldset
input(type="text", name="username", ng-model="form.username", placeholder="User name")
fieldset.login-password
@ -9,8 +9,11 @@ div.login-form-container
fieldset
input.remember-me(type="checkbox", checked="checked", id="remember-me")
label(for="remember-me") remember me on this computer
fieldset
a.button.button-login.button-gray(href="", ng-click="ctrl.submit()", title="Log in") Enter
input(type="submit", class="hidden")
p.login-text
span Not registered yet?
a(href="", title="Register") create your free account here

View File

@ -1,13 +1,17 @@
div.register-form-container
div.register-form-container(tg-register)
form.register-form
fieldset
input(type="text" placeholder="Pick a username")
input(type="text", placeholder="Pick a username", ng-model="data.username",
data-required="true")
fieldset
input(type="text" placeholder="Your email")
input(type="text", placeholder="Your email", ng-model="data.email", data-required="true")
fieldset
input(type="password" placeholder="Set a password")
input(type="password" placeholder="Set a password", ng-model="data.password",
data-required="true")
fieldset
a.button.button-register.button-gray(href="", title="Sign up") Sign up
input(type="submit", class="hidden")
p.register-text
span By clicking "Sign up", you agree to our <br />
a(href="", title="See terms of service") terms of service

View File

@ -238,3 +238,23 @@
}
}
}
.lightbox-generic-error {
section {
flex-basis: 0;
flex-grow: 0;
flex-shrink: 0;
min-width: 420px;
width: 420px;
}
.delete-options {
@include table-flex();
a {
@include table-flex-child(1, 0, 0);
padding: 8px 0;
text-align: center;
}
}
}

View File

@ -1,3 +1,3 @@
.register-form-container {
display: none;
display: block;
}

View File

@ -53,7 +53,8 @@ paths = {
"app/vendor/angular-animate/angular-animate.js",
"app/vendor/i18next/i18next.js",
"app/js/Sortable.js",
"app/vendor/moment/min/moment-with-langs.js"
"app/vendor/moment/min/moment-with-langs.js",
"app/vendor/checksley/checksley.js"
]
}