Skip to content
Snippets Groups Projects
Commit 0c946a54 authored by Rodrigo Nascimento's avatar Rodrigo Nascimento
Browse files

Create methods and views for username request

parent ee609777
No related branches found
No related tags found
No related merge requests found
......@@ -19,6 +19,10 @@ Router.onBeforeAction ->
this.layout('loginLayout')
return this.render('loginIntro')
if not Meteor.user().username?
this.layout('usernameLayout')
return this.render('usernamePrompt')
this.next()
, {
except: ['login']
......
......@@ -89,6 +89,12 @@ code {
border-color: #FAEBCC;
}
.alert-danger {
color: #A94442;
background-color: #F2DEDE;
border-color: #EBCCD1;
}
.landing-page .hidden {
visibility: hidden !important;
display: none !important;
......
<template name="usernameLayout">
<section class="landing-page">
<div class="wrapper">
{{ > yield }}
</div>
</section>
</template>
Template.usernamePrompt.onCreated ->
self = this
self.username = new ReactiveVar
Meteor.call 'getUsernameSuggestion', (error, username) ->
self.username.set
ready: true
username: username
Meteor.defer ->
self.find('input').focus()
Template.usernamePrompt.helpers
username: ->
return Template.instance().username.get()
Template.usernamePrompt.events
'submit #login-card': (event, instance) ->
event.preventDefault()
username = instance.username.get()
username.empty = false
username.error = false
instance.username.set(username)
button = $(event.target).find('button.login')
Rocket.Button.loading(button)
value = $("input").val().trim()
if value is ''
username.empty = true
instance.username.set(username)
Rocket.Button.reset(button)
return
Meteor.call 'setUsername', value, (err, result) ->
if err?
username.error = true
username.username = value
Rocket.Button.reset(button)
instance.username.set(username)
<template name="usernamePrompt">
<form id="login-card" method='/'>
<div class="fields">
<h2>{{_ "usernameRegistration.Username_title"}}</h2>
<div>
{{_ "usernameRegistration.Username_description"}}
</div>
{{#if username.error}}
<br/>
<div class="alert alert-danger">
{{{_ "usernameRegistration.Username_unavaliable" username.username}}}
</div>
{{/if}}
{{#if username.empty}}
<br/>
<div class="alert alert-danger">
{{{_ "usernameRegistration.Username_cant_be_empty"}}}
</div>
{{/if}}
</div>
<div class="fields">
<div class='input-text active'>
<div class='field'>
{{#if username.ready}}
<span>
<input type="text" name='username' value="{{username.username}}" placeholder='{{_ "usernameRegistration.Username"}}' />
</span>
<i></i>
{{else}}
{{_ "usernameRegistration.Loading_suggestion"}}
{{/if}}
</div>
</div>
</div>
{{#if username.ready}}
<div class="submit">
<button data-loading-text="{{_ "general.Please_wait"}}..." class='button primary login'><span>{{_ "usernameRegistration.Use_this_username"}}</span></button>
</div>
{{/if}}
</form>
</template>
......@@ -96,6 +96,15 @@
"We_have_sent_registration_email": "Nós lhe enviamos um e-mail para confirmar o seu registro. Se você não receber um e-mail em breve, por favor retorne e tente novamente.",
"We_have_sent_password_email": "Nós lhe enviamos um e-mail com instruções para redefinir sua senha. Se você não receber um e-mail em breve, por favor retorne e tente novamente."
},
"usernameRegistration": {
"Username": "Nome de usuário",
"Loading_suggestion": "Buscando sugestões...",
"Username_title": "Cadastre um nome de usuário",
"Username_description": "O nome de usuário serve para que outras pessoas possam mencionar você em mensagens",
"Use_this_username": "Usar este nome de usuário",
"Username_unavaliable": "<strong>%s</strong> já está sendo usado :(",
"Username_cant_be_empty": "O nome de usuário não pode ser vazio"
},
"loginIntro": {
"Access_online_demo": "Acesse o demo online",
"Access_Online_Demo": "Acesse o Demo Online",
......
slug = (text) ->
text = slugify text, '.'
return text.replace(/[^0-9a-z-_.]/g, '')
usernameIsAvaliable = (username) ->
if username.length < 1
return false
return not Meteor.users.findOne({username: username})?
Meteor.methods
getUsernameSuggestion: ->
if not Meteor.userId()
throw new Meteor.Error 203, '[methods] typingStatus -> Usuário não logado'
user = Meteor.user()
usernames = []
username = undefined
usernames.push slug user.name
nameParts = user.name.split()
if nameParts.length > 1
first = nameParts[0]
last = nameParts[nameParts.length - 1]
usernames.push slug first[0] + last
usernames.push slug first + last[0]
if user.profile?.name?
usernames.push slug user.profile.name
if user.services?
for serviceName, service of user.services
if service.name?
usernames.push slug service.name
else if service.username?
usernames.push slug service.username
if user.emails?.length > 0
for email in user.emails when email.verified is true
usernames.push slug email.address.replace(/@.+$/, '')
for email in user.emails when email.verified is true
usernames.push slug email.address.replace(/(.+)@(\w+).+/, '$1.$2')
for item in usernames
if usernameIsAvaliable item
username = item
break
if usernames[0]? and usernames[0].length > 0
index = 0
while not username?
index++
if usernameIsAvaliable usernames[0] + '-' + index
username = usernames[0] + '-' + index
if usernameIsAvaliable username
return username
return undefined
slug = (text) ->
text = slugify text, '.'
return text.replace(/[^0-9a-z-_.]/g, '')
usernameIsAvaliable = (username) ->
if username.length < 1
return false
return not Meteor.users.findOne({username: username})?
Meteor.methods
setUsername: (username) ->
if not Meteor.userId()
throw new Meteor.Error 203, '[methods] typingStatus -> Usuário não logado'
user = Meteor.user()
if user.username?
throw new Meteor.Error 'username-already-setted'
if not usernameIsAvaliable username
throw new Meteor.Error 'username-unavaliable'
Meteor.users.update({_id: user._id}, {$set: {username: username}})
return username
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment