merge
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 2.0.9 (2012-09-20 13:25:48) stable
|
||||
Version 2.0.9 (2012-09-21 09:37:29) stable
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*=============================================================
|
||||
CUSTOM RULES
|
||||
==============================================================*/
|
||||
//=======================================================
|
||||
// CUSTOM RULES
|
||||
//=======================================================
|
||||
|
||||
body{height:auto;} /* to avoid vertical scroll bar */
|
||||
body{height:auto;} // to avoid vertical scroll bar
|
||||
div.flash.flash-center{left:25%;right:25%;}
|
||||
div.flash.flash-top,div.flash.flash-top:hover{
|
||||
position:relative;
|
||||
@@ -36,16 +36,18 @@ div.flash.flash-top,div.flash.flash-top:hover{
|
||||
font-size:20px;
|
||||
font-weight:300;
|
||||
}
|
||||
/* auth navbar - primitive style */
|
||||
// auth navbar - primitive style
|
||||
.auth_navbar,.auth_navbar a{color:inherit;}
|
||||
.ie-lte7 .auth_navbar,.auth_navbar a{color:expression(this.parentNode.currentStyle['color']); /* ie7 doesn't support inherit */}
|
||||
.auth_navbar a{white-space:nowrap;} /* to avoid the nav split on more lines */
|
||||
.ie-lte7 .auth_navbar,.auth_navbar a{color:expression(this.parentNode.currentStyle['color']); // ie7 doesn't support inherit
|
||||
}
|
||||
.auth_navbar a{white-space:nowrap;} // to avoid the nav split on more lines
|
||||
.auth_navbar a:hover{color:white;text-decoration:none;}
|
||||
ul#navbar>.auth_navbar{
|
||||
display:inline-block;
|
||||
padding:5px;
|
||||
}
|
||||
/* form errors message box customization */
|
||||
|
||||
// form errors message box customization
|
||||
div.error_wrapper{margin-bottom:9px;}
|
||||
div.error{
|
||||
border-radius: 4px;
|
||||
@@ -53,8 +55,9 @@ div.error{
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
}
|
||||
/* below rules are only for formstyle = bootstrap
|
||||
trying to make errors look like bootstrap ones */
|
||||
|
||||
// below rules are only for formstyle = bootstrap
|
||||
// trying to make errors look like bootstrap ones
|
||||
div.controls .error_wrapper{
|
||||
display:inline-block;
|
||||
margin-bottom:0;
|
||||
@@ -67,42 +70,46 @@ div.controls .error{
|
||||
border:none;
|
||||
padding:0;
|
||||
margin:0;
|
||||
//display:inline; /* uncommenting this, the animation effect is lost */
|
||||
//display:inline; // uncommenting this, the animation effect is lost
|
||||
}
|
||||
div.controls .inline-help{color:#3A87AD;}
|
||||
div.controls .error_wrapper+.inline-help{margin-left:-99999px;}
|
||||
/* beautify brand */
|
||||
|
||||
// beautify brand
|
||||
.navbar-inverse .brand{color:#c6cecc;}
|
||||
.navbar-inverse .brand b{display:inline-block;margin-top:-1px;}
|
||||
.navbar-inverse .brand b>span{font-size:22px;color:white}
|
||||
.navbar-inverse .brand:hover b>span{color:white}
|
||||
/* beautify web2py link in navbar */
|
||||
// beautify web2py link in navbar
|
||||
span.highlighted{color:#d8d800;}
|
||||
.open span.highlighted{color:#ffff00;}
|
||||
|
||||
/*=============================================================
|
||||
OVERRIDING WEB2PY.CSS RULES
|
||||
==============================================================*/
|
||||
//===========================================================
|
||||
// OVERRIDING WEB2PY.CSS RULES
|
||||
//===========================================================
|
||||
|
||||
/* reset to default */
|
||||
// reset to default
|
||||
a{white-space:normal;}
|
||||
li{margin-bottom:0;}
|
||||
textarea,button{display:block;}
|
||||
/*reset ul padding */
|
||||
// reset ul padding
|
||||
ul#navbar{padding:0;}
|
||||
/* label aligned to related input */
|
||||
// label aligned to related input
|
||||
td.w2p_fl,td.w2p_fc {padding:0;}
|
||||
#web2py_user_form td{vertical-align:middle;}
|
||||
|
||||
/*=============================================================
|
||||
OVERRIDING BOOTSTRAP.CSS RULES
|
||||
==============================================================*/
|
||||
//==========================================================
|
||||
// OVERRIDING BOOTSTRAP.CSS RULES
|
||||
//==========================================================
|
||||
|
||||
/* right folder for bootstrap black images/icons */
|
||||
// because web2py handles this via js
|
||||
.hidden{visibility:visible;}
|
||||
|
||||
// right folder for bootstrap black images/icons
|
||||
[class^="icon-"],[class*=" icon-"]{
|
||||
background-image:url("../images/glyphicons-halflings.png")
|
||||
}
|
||||
/* right folder for bootstrap white images/icons */
|
||||
// right folder for bootstrap white images/icons
|
||||
.icon-white,
|
||||
.nav-tabs > .active > a > [class^="icon-"],
|
||||
.nav-tabs > .active > a > [class*=" icon-"],
|
||||
@@ -118,20 +125,20 @@ td.w2p_fl,td.w2p_fc {padding:0;}
|
||||
.dropdown-menu > .active > a > [class*=" icon-"] {
|
||||
background-image:url("../images/glyphicons-halflings-white.png");
|
||||
}
|
||||
/* bootstrap has a label as input's wrapper while web2py has a div */
|
||||
// bootstrap has a label as input's wrapper while web2py has a div
|
||||
div>input[type="radio"],div>input[type="checkbox"]{margin:0;}
|
||||
/* bootstrap has button instead of input */
|
||||
// bootstrap has button instead of input
|
||||
input[type="button"], input[type="submit"]{margin-right:8px;}
|
||||
|
||||
/*=============================================================
|
||||
RULES FOR SOLVING CONFLICTS BETWEEN WEB2PY.CSS AND BOOTSTRAP.CSS
|
||||
==============================================================*/
|
||||
//===========================================================
|
||||
// SOLVING CONFLICTS BETWEEN WEB2PY.CSS AND BOOTSTRAP.CSS
|
||||
//===========================================================
|
||||
|
||||
/*when formstyle=table3cols*/
|
||||
// when formstyle=table3cols
|
||||
tr#auth_user_remember__row>td.w2p_fw>div{padding-bottom:8px;}
|
||||
td.w2p_fw div>label{vertical-align:middle;}
|
||||
td.w2p_fc {padding-bottom:5px;}
|
||||
/*when formstyle=divs*/
|
||||
// when formstyle=divs
|
||||
div#auth_user_remember__row{margin-top:4px;}
|
||||
div#auth_user_remember__row>.w2p_fl{display:none;}
|
||||
div#auth_user_remember__row>.w2p_fw{min-height:39px;}
|
||||
@@ -144,7 +151,8 @@ div.w2p_fc{
|
||||
padding-left:5px;
|
||||
margin-top:-8px;
|
||||
}
|
||||
/*when formstyle=ul*/
|
||||
|
||||
// when formstyle=ul
|
||||
form>ul{
|
||||
list-style:none;
|
||||
margin:0;
|
||||
@@ -152,28 +160,30 @@ form>ul{
|
||||
li#auth_user_remember__row{margin-top:4px;}
|
||||
li#auth_user_remember__row>.w2p_fl{display:none;}
|
||||
li#auth_user_remember__row>.w2p_fw{min-height:39px;}
|
||||
/*when formstyle=bootstrap*/
|
||||
|
||||
// when formstyle=bootstrap
|
||||
#auth_user_remember__row label.checkbox{display:block;}
|
||||
span.inline-help{display:inline-block;}
|
||||
input[type="text"].input-xlarge,input[type="password"].input-xlarge{width:270px;}
|
||||
/*when recaptcha is used*/
|
||||
|
||||
// when recaptcha is used
|
||||
#recaptcha{min-height:30px;display:inline-block;margin-bottom:0;line-height:30px;vertical-align:middle;}
|
||||
td>#recaptcha{margin-bottom:6px;}
|
||||
div>#recaptcha{margin-bottom:9px;}
|
||||
|
||||
/*=============================================================
|
||||
OTHER RULES
|
||||
==============================================================*/
|
||||
//==========================================================
|
||||
// OTHER RULES
|
||||
//==========================================================
|
||||
|
||||
.navbar-inner{
|
||||
position:relative; /*unnecessary ??*/
|
||||
position:relative; // unnecessary
|
||||
}
|
||||
/* Massimo Di Pierro fixed alignment in forms with list:string */
|
||||
|
||||
// fixed alignment in forms with list:string
|
||||
form table tr{margin-bottom:9px;}
|
||||
td.w2p_fw ul{margin-left:0px;}
|
||||
|
||||
/* web2py_console in grid and smartgrid */
|
||||
.hidden{visibility:visible;}
|
||||
// web2py_console in grid and smartgrid
|
||||
.web2py_console input{
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
@@ -193,12 +203,12 @@ td.w2p_fw ul{margin-left:0px;}
|
||||
margin:3px 0 0 2px;
|
||||
}
|
||||
.web2py_grid form table{width:auto;}
|
||||
/* auth_user_remember checkbox extrapadding in IE fix */
|
||||
// auth_user_remember checkbox extrapadding in IE fix
|
||||
.ie-lte9 input#auth_user_remember.checkbox {padding-left:0;}
|
||||
|
||||
/*=============================================================
|
||||
MEDIA QUERIES
|
||||
==============================================================*/
|
||||
//===========================================================
|
||||
// MEDIA QUERIES
|
||||
//===========================================================
|
||||
|
||||
@media only screen and (max-width:979px){
|
||||
body{padding-top:0px;}
|
||||
|
||||
@@ -14,6 +14,93 @@ pass
|
||||
}}
|
||||
</div>
|
||||
<script language="javascript"><!--
|
||||
jQuery("#web2py_user_form input:visible:enabled:first").focus();
|
||||
jQuery("#web2py_user_form input:visible:enabled:first").focus();
|
||||
|
||||
|
||||
function calc_entropy(mystring) {
|
||||
/*" calculate a simple entropy for a given string "*/
|
||||
var lowerset = 'abcdefghijklmnopqrstuvwxyz';
|
||||
var upperset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
var numberset = '0123456789';
|
||||
var sym1set = '!@#$%^&*()';
|
||||
var sym2set = '~`-_=+[]{}\\|;:\'",.<>?/';
|
||||
var otherset = '0123456789abcdefghijklmnopqrstuvwxyz' /*anything else*/
|
||||
var alphabet = 0;
|
||||
var other = {};
|
||||
var seen = {};
|
||||
var lastset = null;
|
||||
var mystringlist = mystring.split('');
|
||||
for (var i=0;i<mystringlist.length;i++) {
|
||||
var c = mystringlist[i];
|
||||
//console.log('we are at char', c);
|
||||
/* classify this character*/
|
||||
var inset = otherset;
|
||||
while (1) {
|
||||
/*lowerset*/
|
||||
if (lowerset.indexOf(c) != -1) {
|
||||
inset = lowerset;
|
||||
break
|
||||
};
|
||||
/*upperset*/
|
||||
if (upperset.indexOf(c) != -1) {
|
||||
inset = upperset;
|
||||
break
|
||||
};
|
||||
/*numberset*/
|
||||
if (numberset.indexOf(c) != -1) {
|
||||
inset = numberset;
|
||||
break
|
||||
};
|
||||
/*sym1set*/
|
||||
if (sym1set.indexOf(c) != -1) {
|
||||
inset = sym1set;
|
||||
break
|
||||
};
|
||||
/*sym2set*/
|
||||
if (sym2set.indexOf(c) != -1) {
|
||||
inset = sym2set;
|
||||
break
|
||||
} else {break};
|
||||
}
|
||||
//console.log('inset detected as', inset, seen);
|
||||
/*calculate effect of character on alphabet size*/
|
||||
if (!(inset in seen)) {
|
||||
//console.log('credit for a new character set');
|
||||
seen[inset] = 1;
|
||||
alphabet += inset.length; /*credit for a new character set*/
|
||||
}
|
||||
else if (!(c in other)) {
|
||||
//console.log('credit for unique characters');
|
||||
alphabet += 1;
|
||||
other[c] = 1;
|
||||
}
|
||||
if (inset != lastset) {
|
||||
//console.log('credit for set transitions');
|
||||
alphabet += 1; /*credit for set transitions*/
|
||||
lastset = inset;
|
||||
}
|
||||
}
|
||||
var entropy = mystring.length / 1.0 * Math.log(alphabet) / 0.6931471805599453; /*math.log(2)*/
|
||||
return Math.round(entropy*100)/100
|
||||
}
|
||||
|
||||
function validate_entropy(myfield, midrange) {
|
||||
var k = 256.0/midrange;
|
||||
var validator = function () {
|
||||
var value = calc_entropy(myfield.val());
|
||||
var color;
|
||||
if(value<30) {
|
||||
var c = Math.floor(value*k).toString(16);
|
||||
color = '#ff'+((c.length==1)?'0':''+c)+'00';
|
||||
} else {
|
||||
var c = Math.floor(Math.max(0,255-(value-midrange)*k)).toString(16);
|
||||
color = '#'+((c.length==1)?'0':'')+c+'ff00';
|
||||
}
|
||||
myfield.css('background-color',color);
|
||||
}
|
||||
myfield.on('keyup', validator);
|
||||
myfield.on('keydown', validator);
|
||||
}
|
||||
validate_entropy(jQuery('#auth_user_password'),50);
|
||||
//--></script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user