This post contains a source code snippet for the login page in EXTJS.
Login Page EXTJS Code - Login.js
Ext.define('App.view.auth.Login', {
extend: 'Ext.Container',
xtype: 'authlogin',
controller: 'authlogin',
cls: 'auth-login',
layout: {
type: 'vbox',
align: 'center',
pack: 'center'
},
items: [{
cls: 'auth-header',
html:
'<span class="logo x-fa fa-circle-o-notch"></span>'+
'<div class="title">Coworkee</div>'+
'<div class="caption">Employee directory</div>'
}, {
xtype: 'formpanel',
reference: 'form',
layout: 'vbox',
ui: 'auth',
items: [{
xtype: 'textfield',
name: 'username',
placeholder: 'Username',
required: true
}, {
xtype: 'passwordfield',
name: 'password',
placeholder: 'Password',
required: true
}, {
xtype: 'button',
text: 'LOG IN',
iconAlign: 'right',
iconCls: 'x-fa fa-angle-right',
handler: 'onLoginTap',
ui: 'action'
}]
}, {
cls: 'auth-footer',
html:
'<div>Ext JS example</div>'+
'<a href="http://www.sencha.com" target="_blank">'+
'<span class="logo ext ext-sencha"></span>'+
'<span class="label">Sencha</span>'+
'</a>'
}]
});
The above Login.js produces UI:
LoginController.js
Ext.define('App.view.auth.LoginController', {
extend: 'Ext.app.ViewController',
alias: 'controller.authlogin',
init: function() {
this.callParent(arguments);
this.lookup('form').setValues({
username: 'norma.flores',
password: 'wvyrEDvxI'
});
},
onLoginTap: function() {
var me = this,
form = me.lookup('form'),
values = form.getValues();
form.clearErrors();
Ext.Viewport.setMasked({ xtype: 'loadmask' });
App.model.Session.login(values.username, values.password)
.then(function(session) {
me.fireEvent('login', session);
})
.catch(function(errors) {
form.setErrors(App.util.Errors.toForm(errors));
})
.then(function(session) {
Ext.Viewport.setMasked(false);
});
}
});
Login.scss
// Note: image from https://pixabay.com (Creative Commons CC0)
$auth-color: white;
$auth-background-color: #123d40;
$auth-background-image: url(get-resource-path('images/auth-background.jpg'));
@include panel-ui(
$ui: 'auth',
$background-color: transparent,
$body-background-color: transparentize($auth-background-color, 0.75),
$body-color: $auth-color,
$body-padding: 24px
);
.auth-login {
@include background-size(cover);
background-image: $auth-background-image;
background-position: center;
> .x-body-el {
background-color: rgba(black, 0.25);
}
.x-formpanel {
width: 256px;
.x-button {
// Balance button vertical spacing with form fields
margin: $field-vertical-spacing/2 0;
.x-big {
margin: $field-vertical-spacing-big/2 0;
}
}
}
.auth-header,
.auth-footer {
color: $auth-color;
text-align: center;
padding: 16px;
a {
color: $auth-color;
text-decoration: none;
}
}
.auth-header {
.logo {
@include single-text-shadow;
color: $auth-color;
font-size: 40px;
line-height: 1;
}
.title, .caption {
white-space: nowrap;
}
.title {
font-size: 31px;
font-weight: bold;
}
.caption {
font-size: 15px;
text-transform: uppercase;
}
}
.auth-footer {
.logo {
font-size: 18px;
margin-right: 2px;
margin-left: -4px;
&::before {
vertical-align: middle;
}
}
.label {
font-weight: bold;
}
}
}
GitHub Repository
The complete source code of this example is available on GitHub.
Comments
Post a Comment