forked from DGNum/gestioCOF
détection et affichage capslock
This commit is contained in:
parent
d559549c06
commit
e31dadad10
3 changed files with 63 additions and 20 deletions
|
@ -29,9 +29,6 @@ SECRET_KEY = 'q()(zn4m63i%5cp4)f+ww4-28_w+ly3q9=6imw2ciu&_(5_4ah'
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
|
|
||||||
ALLOWED_HOSTS = ['127.0.0.1']
|
|
||||||
|
|
||||||
|
|
||||||
# Application definition
|
# Application definition
|
||||||
INSTALLED_APPS = (
|
INSTALLED_APPS = (
|
||||||
'gestioncof',
|
'gestioncof',
|
||||||
|
@ -101,6 +98,7 @@ DATABASES = {
|
||||||
'NAME': os.environ['DBNAME'],
|
'NAME': os.environ['DBNAME'],
|
||||||
'USER': os.environ['DBUSER'],
|
'USER': os.environ['DBUSER'],
|
||||||
'PASSWORD': os.environ['DBPASSWD'],
|
'PASSWORD': os.environ['DBPASSWD'],
|
||||||
|
'HOST': os.environ.get('DBHOST', 'localhost'),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +124,7 @@ STATIC_URL = '/static/'
|
||||||
STATIC_ROOT = '/var/www/static/'
|
STATIC_ROOT = '/var/www/static/'
|
||||||
|
|
||||||
STATICFILES_DIRS = (
|
STATICFILES_DIRS = (
|
||||||
os.path.join(BASE_DIR, 'static/'),
|
os.path.join(BASE_DIR, 'static/'),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Media upload (through ImageField, SiteField)
|
# Media upload (through ImageField, SiteField)
|
||||||
|
@ -138,31 +136,32 @@ MEDIA_URL = '/media/'
|
||||||
# Various additional settings
|
# Various additional settings
|
||||||
SITE_ID = 1
|
SITE_ID = 1
|
||||||
|
|
||||||
# URL prefix for admin static files -- CSS, JavaScript and images.
|
|
||||||
# Make sure to use a trailing slash.
|
|
||||||
# Examples: "http://foo.com/static/admin/", "/static/admin/".
|
|
||||||
ADMIN_MEDIA_PREFIX = '/static/grappelli/'
|
|
||||||
GRAPPELLI_ADMIN_HEADLINE = "GestioCOF"
|
GRAPPELLI_ADMIN_HEADLINE = "GestioCOF"
|
||||||
GRAPPELLI_ADMIN_TITLE = "<a href=\"/\">GestioCOF</a>"
|
GRAPPELLI_ADMIN_TITLE = "<a href=\"/\">GestioCOF</a>"
|
||||||
|
|
||||||
PETITS_COURS_FROM = "Le COF <cof@ens.fr>"
|
MAIL_DATA = {
|
||||||
PETITS_COURS_BCC = "archivescof@gmail.com"
|
'petits_cours': {
|
||||||
PETITS_COURS_REPLYTO = "cof@ens.fr"
|
'FROM': "Le COF <cof@ens.fr>",
|
||||||
|
'BCC': "archivescof@gmail.com",
|
||||||
|
'REPLYTO': "cof@ens.fr"},
|
||||||
|
'rappels': {
|
||||||
|
'FROM': 'Le BdA <bda@ens.fr>',
|
||||||
|
'REPLYTO': 'Le BdA <bda@ens.fr>'},
|
||||||
|
'revente': {
|
||||||
|
'FROM': 'BdA-Revente <bda-revente@ens.fr>',
|
||||||
|
'REPLYTO': 'BdA-Revente <bda-revente@ens.fr>'},
|
||||||
|
}
|
||||||
|
|
||||||
RAPPEL_FROM = 'Le BdA <bda@ens.fr>'
|
LOGIN_URL = "cof-login"
|
||||||
RAPPEL_REPLY_TO = RAPPEL_FROM
|
LOGIN_REDIRECT_URL = "home"
|
||||||
|
|
||||||
LOGIN_URL = "/gestion/login"
|
|
||||||
LOGIN_REDIRECT_URL = "/gestion/"
|
|
||||||
|
|
||||||
CAS_SERVER_URL = 'https://cas.eleves.ens.fr/'
|
CAS_SERVER_URL = 'https://cas.eleves.ens.fr/'
|
||||||
CAS_IGNORE_REFERER = True
|
CAS_IGNORE_REFERER = True
|
||||||
CAS_REDIRECT_URL = '/gestion/'
|
CAS_REDIRECT_URL = '/'
|
||||||
CAS_EMAIL_FORMAT = "%s@clipper.ens.fr"
|
CAS_EMAIL_FORMAT = "%s@clipper.ens.fr"
|
||||||
AUTHENTICATION_BACKENDS = (
|
AUTHENTICATION_BACKENDS = (
|
||||||
'django.contrib.auth.backends.ModelBackend',
|
'django.contrib.auth.backends.ModelBackend',
|
||||||
'gestioncof.shared.COFCASBackend',
|
'gestioncof.shared.COFCASBackend',
|
||||||
'kfet.backends.GenericTeamBackend',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# EMAIL_HOST="nef.ens.fr"
|
# EMAIL_HOST="nef.ens.fr"
|
||||||
|
@ -177,7 +176,7 @@ CHANNEL_LAYERS = {
|
||||||
"default": {
|
"default": {
|
||||||
"BACKEND": "asgi_redis.RedisChannelLayer",
|
"BACKEND": "asgi_redis.RedisChannelLayer",
|
||||||
"CONFIG": {
|
"CONFIG": {
|
||||||
"hosts": [("localhost", 6379)],
|
"hosts": [(os.environ.get("REDIS_HOST", "localhost"), 6379)],
|
||||||
},
|
},
|
||||||
"ROUTING": "cof.routing.channel_routing",
|
"ROUTING": "cof.routing.channel_routing",
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,3 +64,22 @@
|
||||||
color:#FFF !important;
|
color:#FFF !important;
|
||||||
background:#C8102E !important;
|
background:#C8102E !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.jconfirm .capslock {
|
||||||
|
position: relative ;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jconfirm .capslock .glyphicon {
|
||||||
|
position: absolute;
|
||||||
|
padding: 10px;
|
||||||
|
right: 0px;
|
||||||
|
top: 15px;
|
||||||
|
font-size: 30px;
|
||||||
|
display: none ;
|
||||||
|
margin-left: 60px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jconfirm .capslock input {
|
||||||
|
padding-right: 50px;
|
||||||
|
padding-left: 50px;
|
||||||
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ function getErrorsHtml(data) {
|
||||||
|
|
||||||
function requestAuth(data, callback, focus_next = null) {
|
function requestAuth(data, callback, focus_next = null) {
|
||||||
var content = getErrorsHtml(data);
|
var content = getErrorsHtml(data);
|
||||||
content += '<input type="password" name="password" autofocus>',
|
content += '<div class="capslock"><span class="glyphicon glyphicon-lock"></span><input type="password" name="password" autofocus><div>',
|
||||||
$.confirm({
|
$.confirm({
|
||||||
title: 'Authentification requise',
|
title: 'Authentification requise',
|
||||||
content: content,
|
content: content,
|
||||||
|
@ -102,14 +102,39 @@ function requestAuth(data, callback, focus_next = null) {
|
||||||
},
|
},
|
||||||
onOpen: function() {
|
onOpen: function() {
|
||||||
var that = this;
|
var that = this;
|
||||||
|
var capslock = -1 ; // 1 -> caps on ; 0 -> caps off ; -1 or 2 -> unknown
|
||||||
this.$content.find('input').on('keypress', function(e) {
|
this.$content.find('input').on('keypress', function(e) {
|
||||||
if (e.keyCode == 13)
|
if (e.keyCode == 13)
|
||||||
that.$confirmButton.click();
|
that.$confirmButton.click();
|
||||||
|
|
||||||
|
var s = String.fromCharCode(e.which);
|
||||||
|
if ((s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey)|| //caps on, shift off
|
||||||
|
(s.toUpperCase() !== s && s.toLowerCase() === s && e.shiftKey)) { //caps on, shift on
|
||||||
|
capslock = 1 ;
|
||||||
|
} else if ((s.toLowerCase() === s && s.toUpperCase() !== s && !e.shiftKey)|| //caps off, shift off
|
||||||
|
(s.toLowerCase() !== s && s.toUpperCase() === s && e.shiftKey)) { //caps off, shift on
|
||||||
|
capslock = 0 ;
|
||||||
|
}
|
||||||
|
if (capslock == 1)
|
||||||
|
$('.capslock .glyphicon').show() ;
|
||||||
|
else if (capslock == 0)
|
||||||
|
$('.capslock .glyphicon').hide() ;
|
||||||
|
});
|
||||||
|
// Capslock key is not detected by keypress
|
||||||
|
this.$content.find('input').on('keydown', function(e) {
|
||||||
|
if (e.which == 20) {
|
||||||
|
capslock = 1-capslock ;
|
||||||
|
}
|
||||||
|
if (capslock == 1)
|
||||||
|
$('.capslock .glyphicon').show() ;
|
||||||
|
else if (capslock == 0)
|
||||||
|
$('.capslock .glyphicon').hide() ;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onClose: function() {
|
onClose: function() {
|
||||||
if (focus_next)
|
if (focus_next)
|
||||||
this._lastFocused = focus_next;
|
this._lastFocused = focus_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue