Nouvelle version du site avec info à jour concernant IRC et liste de diffusion.
Drop du support Mattermost (pas utilisé).
This commit is contained in:
parent
a8520bc64b
commit
de61571664
7064
css/bootstrap.css
vendored
7064
css/bootstrap.css
vendored
File diff suppressed because it is too large
Load Diff
11
css/bootstrap.min.css
vendored
11
css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
67
css/grid.css
Normal file
67
css/grid.css
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/* Computer */
|
||||||
|
.grid_1 { width: 6.5%; }
|
||||||
|
.grid_2 { width: 15%; }
|
||||||
|
.grid_3 { width: 23.5%; }
|
||||||
|
.grid_4 { width: 32%; }
|
||||||
|
.grid_5 { width: 40.5%; }
|
||||||
|
.grid_6 { width: 49%; }
|
||||||
|
.grid_7 { width: 57.5%; }
|
||||||
|
.grid_8 { width: 66%; }
|
||||||
|
.grid_9 { width: 74.5%; }
|
||||||
|
.grid_10 { width: 83%; }
|
||||||
|
.grid_11 { width: 91.5%; }
|
||||||
|
.grid_12 { width: 100%; }
|
||||||
|
|
||||||
|
.grid_1,
|
||||||
|
.grid_2,
|
||||||
|
.grid_3,
|
||||||
|
.grid_4,
|
||||||
|
.grid_5,
|
||||||
|
.grid_6,
|
||||||
|
.grid_7,
|
||||||
|
.grid_8,
|
||||||
|
.grid_9,
|
||||||
|
.grid_10,
|
||||||
|
.grid_11,
|
||||||
|
.grid_12 {
|
||||||
|
margin: 0 2% 1% 0;
|
||||||
|
float: left;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alpha{margin-left:0;}
|
||||||
|
.omega{margin-right:0;}
|
||||||
|
|
||||||
|
.container{
|
||||||
|
width: 90%; /*width: 1000px;*/
|
||||||
|
max-width: 1000px;
|
||||||
|
margin: auto;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both;content:' ';display:block;font-size:0;line-height:0;visibility:hidden;width:0;height:0}* html .clearfix,*:first-child+html .clearfix{zoom:1}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Mobile */
|
||||||
|
@media screen and (max-width : 480px) {
|
||||||
|
|
||||||
|
.grid_1,
|
||||||
|
.grid_2,
|
||||||
|
.grid_3,
|
||||||
|
.grid_4,
|
||||||
|
.grid_5,
|
||||||
|
.grid_6,
|
||||||
|
.grid_7,
|
||||||
|
.grid_8,
|
||||||
|
.grid_9,
|
||||||
|
.grid_10,
|
||||||
|
.grid_11,
|
||||||
|
.grid_12 {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
501
css/normalize.css
vendored
Normal file
501
css/normalize.css
vendored
Normal file
@ -0,0 +1,501 @@
|
|||||||
|
/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
HTML5 display definitions
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Corrects block display not defined in IE6/7/8/9 & FF3
|
||||||
|
*/
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Corrects inline-block display not defined in IE6/7/8/9 & FF3
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
video {
|
||||||
|
display: inline-block;
|
||||||
|
*display: inline;
|
||||||
|
*zoom: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prevents modern browsers from displaying 'audio' without controls
|
||||||
|
* Remove excess height in iOS5 devices
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
|
||||||
|
* Known issue: no IE6 support
|
||||||
|
*/
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Base
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
|
||||||
|
* http://clagnut.com/blog/348/#c790
|
||||||
|
* 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
|
||||||
|
* www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
|
||||||
|
*/
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: 100%; /* 1 */
|
||||||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||||||
|
-ms-text-size-adjust: 100%; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses font-family inconsistency between 'textarea' and other form elements.
|
||||||
|
*/
|
||||||
|
|
||||||
|
html,
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses margins handled incorrectly in IE6/7
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Links
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses outline displayed oddly in Chrome
|
||||||
|
*/
|
||||||
|
|
||||||
|
a:focus {
|
||||||
|
outline: thin dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Improves readability when focused and also mouse hovered in all browsers
|
||||||
|
* people.opera.com/patrickl/experiments/keyboard/test
|
||||||
|
*/
|
||||||
|
|
||||||
|
a:hover,
|
||||||
|
a:active {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Typography
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses font sizes and margins set differently in IE6/7
|
||||||
|
* Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
|
||||||
|
*/
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 1em 0 0 0;
|
||||||
|
color : #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
margin: 1.33em 0;
|
||||||
|
color : yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
margin: 1.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
margin: 2.33em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses styling not present in IE7/8/9, S5, Chrome
|
||||||
|
*/
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses style set to 'bolder' in FF3+, S4/5, Chrome
|
||||||
|
*/
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 1em 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses styling not present in S5, Chrome
|
||||||
|
*/
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses styling not present in IE6/7/8/9
|
||||||
|
*/
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses margins set differently in IE6/7
|
||||||
|
*/
|
||||||
|
|
||||||
|
p,
|
||||||
|
pre {
|
||||||
|
margin: 1em 0;
|
||||||
|
text-align:justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Corrects font family set oddly in IE6, S4/5, Chrome
|
||||||
|
* en.wikipedia.org/wiki/User:Davidgothberg/Test59
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, serif;
|
||||||
|
_font-family: 'courier new', monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Improves readability of pre-formatted text in all browsers
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre {
|
||||||
|
white-space: pre;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Addresses CSS quotes not supported in IE6/7
|
||||||
|
* 2. Addresses quote property not supported in S4
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 1 */
|
||||||
|
|
||||||
|
q {
|
||||||
|
quotes: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2 */
|
||||||
|
|
||||||
|
q:before,
|
||||||
|
q:after {
|
||||||
|
content: '';
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prevents sub and sup affecting line-height in all browsers
|
||||||
|
* gist.github.com/413930
|
||||||
|
*/
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Lists
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses margins set differently in IE6/7
|
||||||
|
*/
|
||||||
|
|
||||||
|
dl,
|
||||||
|
menu,
|
||||||
|
ol,
|
||||||
|
ul {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin: 0 0 0 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses paddings set differently in IE6/7
|
||||||
|
*/
|
||||||
|
|
||||||
|
menu,
|
||||||
|
ol,
|
||||||
|
ul {
|
||||||
|
padding: 0 0 0 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Corrects list images handled incorrectly in IE7
|
||||||
|
*/
|
||||||
|
|
||||||
|
nav ul,
|
||||||
|
nav ol {
|
||||||
|
list-style: none;
|
||||||
|
list-style-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
|
||||||
|
* 2. Improves image quality when scaled in IE7
|
||||||
|
* code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
|
||||||
|
*/
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0; /* 1 */
|
||||||
|
-ms-interpolation-mode: bicubic; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Corrects overflow displayed oddly in IE9
|
||||||
|
*/
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Figures
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses margin not present in IE6/7/8/9, S5, O11
|
||||||
|
*/
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Forms
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Corrects margin displayed oddly in IE6/7
|
||||||
|
*/
|
||||||
|
|
||||||
|
form {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define consistent border, margin, and padding
|
||||||
|
*/
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid #c0c0c0;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0.35em 0.625em 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Corrects color not being inherited in IE6/7/8/9
|
||||||
|
* 2. Corrects text not wrapping in FF3
|
||||||
|
* 3. Corrects alignment displayed oddly in IE6/7
|
||||||
|
*/
|
||||||
|
|
||||||
|
legend {
|
||||||
|
border: 0; /* 1 */
|
||||||
|
padding: 0;
|
||||||
|
white-space: normal; /* 2 */
|
||||||
|
*margin-left: -7px; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Corrects font size not being inherited in all browsers
|
||||||
|
* 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
|
||||||
|
* 3. Improves appearance and consistency in all browsers
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-size: 100%; /* 1 */
|
||||||
|
margin: 0; /* 2 */
|
||||||
|
vertical-align: baseline; /* 3 */
|
||||||
|
*vertical-align: middle; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
line-height: normal; /* 1 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Improves usability and consistency of cursor style between image-type 'input' and others
|
||||||
|
* 2. Corrects inability to style clickable 'input' types in iOS
|
||||||
|
* 3. Removes inner spacing in IE7 without affecting normal text inputs
|
||||||
|
* Known issue: inner spacing remains in IE6
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input[type="button"],
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="submit"] {
|
||||||
|
cursor: pointer; /* 1 */
|
||||||
|
-webkit-appearance: button; /* 2 */
|
||||||
|
*overflow: visible; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Re-set default cursor for disabled elements
|
||||||
|
*/
|
||||||
|
|
||||||
|
button[disabled],
|
||||||
|
input[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Addresses box sizing set to content-box in IE8/9
|
||||||
|
* 2. Removes excess padding in IE8/9
|
||||||
|
* 3. Removes excess padding in IE7
|
||||||
|
Known issue: excess padding remains in IE6
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
*height: 13px; /* 3 */
|
||||||
|
*width: 13px; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Addresses appearance set to searchfield in S5, Chrome
|
||||||
|
* 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"] {
|
||||||
|
-webkit-appearance: textfield; /* 1 */
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
-webkit-box-sizing: content-box; /* 2 */
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Removes inner padding and search cancel button in S5, Chrome on OS X
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"]::-webkit-search-decoration,
|
||||||
|
input[type="search"]::-webkit-search-cancel-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Removes inner padding and border in FF3+
|
||||||
|
* www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
|
||||||
|
*/
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. Removes default vertical scrollbar in IE6/7/8/9
|
||||||
|
* 2. Improves readability and alignment in all browsers
|
||||||
|
*/
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto; /* 1 */
|
||||||
|
vertical-align: top; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Tables
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove most spacing between table cells
|
||||||
|
*/
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
214
css/style.css
214
css/style.css
@ -1,22 +1,214 @@
|
|||||||
|
/* Global */
|
||||||
|
|
||||||
body {
|
body {
|
||||||
overflow-x: hidden;
|
font-family: 'arial', sans-serif;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 1em;
|
||||||
|
color: #8a8683;
|
||||||
|
background-color:#000000;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
a:link {
|
||||||
|
color: yellow;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: white;
|
||||||
|
background-color:black;
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color:yellow;
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
/* Navigation */
|
||||||
|
|
||||||
|
.menu {
|
||||||
|
position:fixed;
|
||||||
|
top:0px;
|
||||||
|
width:100%;
|
||||||
|
height:auto;
|
||||||
|
z-index:100;
|
||||||
|
background-color:black;
|
||||||
|
}
|
||||||
|
#logo {
|
||||||
|
text-align: left;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
#nav {
|
||||||
|
text-align: right;
|
||||||
|
margin: 30px 0 0 0;
|
||||||
|
}
|
||||||
|
.navigation{
|
||||||
|
float: right;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.navigation li{
|
||||||
|
float: left;
|
||||||
|
padding:0 0 0 50px;
|
||||||
|
color:yellow;
|
||||||
|
}
|
||||||
|
.navigation li:hover{
|
||||||
|
cursor:pointer;
|
||||||
|
color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigation .active{
|
||||||
|
cursor:pointer;
|
||||||
|
color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* General Slides */
|
||||||
|
|
||||||
|
.slide{
|
||||||
|
background-color:rgba(0,0,0,0.7);
|
||||||
|
background-attachment: fixed;
|
||||||
|
width:100%;
|
||||||
|
height:auto;
|
||||||
|
position: relative;
|
||||||
|
top:85px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bgvid {
|
||||||
|
position:fixed;
|
||||||
|
width:100%;
|
||||||
|
z-index: -500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Slide 1 */
|
||||||
|
|
||||||
|
#slide1{
|
||||||
|
}
|
||||||
|
#slide1 h1 {
|
||||||
|
font-size: 3.8em;
|
||||||
|
letter-spacing: -3px;
|
||||||
|
line-height: 0px;
|
||||||
|
color:#8a8683;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
#slide1 h2 {
|
||||||
|
font-size: 2em;
|
||||||
|
color: #8a8683;
|
||||||
|
line-height: 0px;
|
||||||
|
padding-bottom:20px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button{
|
||||||
|
color:#fff;
|
||||||
|
background-color:#000;
|
||||||
|
font-family:'arial';
|
||||||
|
}
|
||||||
|
|
||||||
|
.text{
|
||||||
|
background-color:#fff;
|
||||||
|
font-family:'arial';
|
||||||
|
}
|
||||||
|
|
||||||
|
.icons{
|
||||||
|
width:100px;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ecosysteme{
|
||||||
|
width:50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tablet */
|
||||||
|
@media screen and (max-width: 1024px) {
|
||||||
|
|
||||||
|
#logo {
|
||||||
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
header .container {
|
#nav {
|
||||||
padding-top: 100px;
|
width:100%;
|
||||||
padding-bottom: 50px;
|
margin:10px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
header img {
|
.navigation{
|
||||||
display: block;
|
width: 100%;
|
||||||
margin: 0 auto 20px;
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
header .intro-text .skills {
|
.navigation li{
|
||||||
font-size: 1.25em;
|
float: left;
|
||||||
font-weight: 300;
|
width:25%;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide{
|
||||||
|
background-attachment: fixed;
|
||||||
|
width:100%;
|
||||||
|
position: relative;
|
||||||
|
padding:140px 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#decorative {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
text-align:center;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#slide1 h1 {
|
||||||
|
line-height: 1em;
|
||||||
|
}
|
||||||
|
#slide1 h2 {
|
||||||
|
line-height: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile */
|
||||||
|
@media screen and (max-width: 480px) {
|
||||||
|
|
||||||
|
#logo {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav {
|
||||||
|
width:100%;
|
||||||
|
margin:5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigation{
|
||||||
|
width: 100%;
|
||||||
|
float: left;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigation li{
|
||||||
|
float: left;
|
||||||
|
width:25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide{
|
||||||
|
background-attachment: fixed;
|
||||||
|
width:100%;
|
||||||
|
position: relative;
|
||||||
|
padding:150px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#slide1 h1 {
|
||||||
|
line-height: 1em;
|
||||||
|
}
|
||||||
|
#slide1 h2 {
|
||||||
|
line-height: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
|
||||||
|
#slide1{
|
||||||
|
|
||||||
|
text-align:justify;
|
||||||
}
|
}
|
||||||
|
BIN
images/logo_hackerspaces_monde.png
Normal file
BIN
images/logo_hackerspaces_monde.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
143
images/logo_picto.svg
Normal file
143
images/logo_picto.svg
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
width="94.468437"
|
||||||
|
height="67.160767"
|
||||||
|
viewBox="0 0 94.468437 67.160767"
|
||||||
|
sodipodi:docname="logo_picto.svg"
|
||||||
|
inkscape:export-filename="/home/nwa/Documents/Lyon Open Lab/Collectif LOL/parallax and responsive/images/logo.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<metadata
|
||||||
|
id="metadata8">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1366"
|
||||||
|
inkscape:window-height="691"
|
||||||
|
id="namedview4"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="4.8680853"
|
||||||
|
inkscape:cx="38.498621"
|
||||||
|
inkscape:cy="32.522625"
|
||||||
|
inkscape:current-layer="svg2"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#fff600;stroke-width:4.70173216;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4542"
|
||||||
|
width="89.766708"
|
||||||
|
height="62.459038"
|
||||||
|
x="2.3508661"
|
||||||
|
y="2.3508661" />
|
||||||
|
<circle
|
||||||
|
r="4.0235658"
|
||||||
|
cy="44.207626"
|
||||||
|
cx="68.418625"
|
||||||
|
id="circle822"
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:8.00809765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
ry="1.525695"
|
||||||
|
y="40.821571"
|
||||||
|
x="34.42173"
|
||||||
|
height="6.7451782"
|
||||||
|
width="11.456149"
|
||||||
|
id="rect838"
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:2.5829103;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:8.00809765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="circle842"
|
||||||
|
cx="54.284214"
|
||||||
|
cy="44.207626"
|
||||||
|
r="4.0235658" />
|
||||||
|
<circle
|
||||||
|
r="4.0235658"
|
||||||
|
cy="44.207626"
|
||||||
|
cx="26.015396"
|
||||||
|
id="circle846"
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:8.00809765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:2.93398905;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect852"
|
||||||
|
width="14.782129"
|
||||||
|
height="6.7451782"
|
||||||
|
x="57.660061"
|
||||||
|
y="28.948668"
|
||||||
|
ry="1.525695" />
|
||||||
|
<rect
|
||||||
|
ry="1.525695"
|
||||||
|
y="28.948668"
|
||||||
|
x="39.825947"
|
||||||
|
height="6.7451782"
|
||||||
|
width="14.782129"
|
||||||
|
id="rect858"
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:2.93398905;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:2.93398905;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect860"
|
||||||
|
width="14.782129"
|
||||||
|
height="6.7451782"
|
||||||
|
x="21.991831"
|
||||||
|
y="28.948668"
|
||||||
|
ry="1.525695" />
|
||||||
|
<circle
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:8.00809765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="circle862"
|
||||||
|
cx="68.418625"
|
||||||
|
cy="20.461821"
|
||||||
|
r="4.0235658" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:2.5829103;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect864"
|
||||||
|
width="11.456149"
|
||||||
|
height="6.7451782"
|
||||||
|
x="34.42173"
|
||||||
|
y="17.075764"
|
||||||
|
ry="1.525695" />
|
||||||
|
<circle
|
||||||
|
r="4.0235658"
|
||||||
|
cy="20.461821"
|
||||||
|
cx="54.284214"
|
||||||
|
id="circle866"
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:8.00809765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:8.00809765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="circle868"
|
||||||
|
cx="26.015396"
|
||||||
|
cy="20.461821"
|
||||||
|
r="4.0235658" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.0 KiB |
BIN
images/world_network.jpg
Normal file
BIN
images/world_network.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 112 KiB |
BIN
img/lol.png
BIN
img/lol.png
Binary file not shown.
Before Width: | Height: | Size: 19 KiB |
285
index.html
285
index.html
@ -1,232 +1,79 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE HTML>
|
||||||
<html lang="fr">
|
<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]-->
|
||||||
<head>
|
<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8"><![endif]-->
|
||||||
<meta charset="utf-8">
|
<!--[if IE 8]><html class="no-js lt-ie9"><![endif]-->
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<!--[if gt IE 8]><!--><html class="no-js"><!--<![endif]-->
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<head>
|
||||||
<meta name="ROBOTS" content="INDEX, FOLLOW">
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||||
<title>Laboratoire Ouvert Lyonnais — le LOL</title>
|
<meta name="viewport" content="width=device-width, initial-scale = 1.0, user-scalable = no">
|
||||||
<meta name="keywords" content="hackerspace, hacklab, DIY, bidouillage, informatique, électronique, arts numériques">
|
<title>Laboratoire Ouvert Lyonnais</title>
|
||||||
<meta name="description" content="Présentation du LOL, hackerspace sur Lyon : localisation, projets en cours, vie courante.">
|
<link rel="stylesheet" href="css/normalize.css" type="text/css" media="screen">
|
||||||
|
<link rel="stylesheet" href="css/grid.css" type="text/css" media="screen">
|
||||||
|
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen">
|
||||||
|
</head>
|
||||||
|
|
||||||
<link rel="schema.dc" href="http://purl.org/dc/elements/1.1/">
|
<video autoplay loop poster="images/world_network.jpg" id="bgvid">
|
||||||
<meta name="dc.title" content="Laboratoire Ouvert Lyonnais — le LOL" lang="fr">
|
<source src="videos/background_sound.mp4" type="video/mp4">
|
||||||
<meta name="dc.description" content="Présentation du LOL, hackerspace sur Lyon : localisation, projets en cours, vie courante." lang="fr">
|
</video>
|
||||||
<meta name="dc.language" content="fr">
|
|
||||||
<meta name="dc.publisher" content="LOL">
|
|
||||||
<meta name="dc.rights" content="Creative Commons by-sa 2.0 fr, https://creativecommons.org/licenses/by-sa/2.0/fr/">
|
|
||||||
<meta name="dc.type" content="text">
|
|
||||||
<meta name="dc.format" content="text/html">
|
|
||||||
<meta name="dc.date" content="2011-04-28T22:03:31+02:00">
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
<body>
|
||||||
<link rel="stylesheet" href="css/bootstrap.min.css">
|
|
||||||
|
|
||||||
<!-- Optional theme -->
|
<div class="menu">
|
||||||
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
|
<div class="container clearfix">
|
||||||
|
<div id="logo" class="grid_3">
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<img src="images/logo_picto.svg">
|
||||||
|
</div>
|
||||||
<!-- Latest compiled and minified JavaScript -->
|
<div id="nav" class="grid_9 omega">
|
||||||
<script src="js/bootstrap.min.js"></script>
|
<a href="https://git.labolyon.fr/explore/repos ">Wiki/Git</a>
|
||||||
|
</div>
|
||||||
<!-- Bootstrap
|
</div>
|
||||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
|
||||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
|
||||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body id="page-top" class="index">
|
|
||||||
<nav class="navbar navbar-default navbar-fixed-top">
|
|
||||||
<div class="container">
|
|
||||||
<!-- Brand and toggle get grouped for better mobile display -->
|
|
||||||
<div class="navbar-header page-scroll">
|
|
||||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
|
||||||
<span class="sr-only">Toggle navigation</span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
</button>
|
|
||||||
<a class="navbar-brand" href="#page-top">Laboratoire Ouvert Lyonnais</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
|
||||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
|
||||||
<ul class="nav navbar-nav navbar-right">
|
|
||||||
<li class="hidden">
|
|
||||||
<a href="#page-top"></a>
|
|
||||||
</li>
|
|
||||||
<li class="page-scroll">
|
|
||||||
<a href="#page-top">Accueil</a>
|
|
||||||
</li>
|
|
||||||
<li class="page-scroll">
|
|
||||||
<a href="#about">À propos</a>
|
|
||||||
</li>
|
|
||||||
<li class="page-scroll">
|
|
||||||
<a href="#contact">Contact</a>
|
|
||||||
</li>
|
|
||||||
<li class="page-scroll">
|
|
||||||
<a href="irc://irc.geeknode.org/labolyon">IRC</a>
|
|
||||||
</li>
|
|
||||||
<li class="page-scroll">
|
|
||||||
<a href="https://team.labolyon.fr">Mattermost</a>
|
|
||||||
</li>
|
|
||||||
<li class="page-scroll">
|
|
||||||
<a href="https://git.labolyon.fr">Git</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<!-- /.navbar-collapse -->
|
|
||||||
</div>
|
|
||||||
<!-- /.container-fluid -->
|
|
||||||
</nav>
|
|
||||||
<header>
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<img class="img-responsive" src="img/lol.png" alt="logo du LOL">
|
|
||||||
<div class="intro-text">
|
|
||||||
<hr class="star-light">
|
|
||||||
<span class="skills">Association - Rencontre - Échange - Partage</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<!-- About Section -->
|
<div class="slide" id="slide1" data-slide="1" data-stellar-background-ratio="0.5">
|
||||||
<section class="success" id="about">
|
<div class="container clearfix">
|
||||||
<div class="container">
|
<div id="content" class="grid_7">
|
||||||
<div class="row">
|
<p>
|
||||||
<div class="col-lg-12 text-center">
|
Le Laboratoire ouvert lyonnais est un lieux de brassage et une communauté éclectique.
|
||||||
<h2>À propos</h2>
|
Son objectif est le partage des connaissances et la ré-appropriation des technologies.
|
||||||
<hr class="star-light">
|
Chacun amène son savoir-faire et son envie d'apprendre dans un mélange ludique de création et de convivialité.
|
||||||
</div>
|
Le L.O.L. est l'expression du mouvement global des hackerspaces sur Lyon et
|
||||||
</div>
|
se veut ouvert aux échanges, aux collaborations avec d'autres initiatives.
|
||||||
<div class="row">
|
</p>
|
||||||
<p>Le Laboratoire Ouvert Lyonnais (<abbr title="Laboratoire Ouvert Lyonnais">LOL</abbr>) est un <i lang="en">hackerspace</i> sur Lyon.</p>
|
<p>
|
||||||
<!-- comment parler du PPRA sans le nommer ? :) -->
|
L'électronique, l'informatique, la mécanique, la chimie, les arts numériques, la cuisine expérimentale sont les pratiques des loliens. Les diverses manières d'implication du collectif dans des multiples initiative et évenements permet à celui-ci, dans le temps, de s'adapter à son éco-systeme.
|
||||||
<p>En <a href="http://labolyon.fr/blog/post/2011/01/12/Mise-en-place-d-un-hacker-space-lyonnais">début janvier 2011</a> un membre du <a href="http://logre.org/"><abbr title="Laboratoire Ouvert Grenoblois">LOG</abbr></a>, une paire de personnes impliquées dans la vie lyonnaise, et une pincée de gens venant de différents milieux technologiques (informaticiens barbus) et artistiques (ça chauffe, les flammes de la <a href="http://friche-rvi.org/">Friche RVI</a>) se sont rassemblées lors d'un apéro pour voir s'ils avaient envie de faire des choses ensemble. La réponse fut oui, restait à savoir comment. Le LOL était lancé.</p>
|
</p>
|
||||||
<!-- repris sans vergogne depuis le LOG http://logre.org/ -->
|
<p>
|
||||||
<p>Le LOL rassemble des passionnés de bidouillages en tous genres. Électronique, informatique, mécanique, chimie, arts numériques, cuisine expérimentale, etc. : chacun amène son savoir-faire et sa curiosité dans un mélange ludique de création, bricolage et de détournement technologique en tout genre. Vous avez un projet à partager ? C'est l'occasion de le présenter, et peut-être trouver de nouveaux contributeurs.</p>
|
L'une des vocations du LOL est de fournir à ses membres
|
||||||
<p>L'une des vocations du LOL est de fournir à ses membres un lieu pour héberger leurs projets ainsi que d'organiser des présentations publiques. Il est aussi ouvert sur l'extérieur par le biais de partenariats avec les institutionnels, animations ou participation à des événements.</p>
|
un lieu pour héberger leurs projets ainsi que d'organiser des présentations publiques, des ateliers autonomisants.</p>
|
||||||
<p>Un autre objectif du LOL est le partage des connaissances, et l'aide à la ré-appropriation des technologies par le grand public. Notre vie est remplie de machines plus ou moins intelligentes. Si en gérer une seule ne pose pas de soucis, prévoir ce qui va se passer lorsque plusieurs machines vont travailler ensemble est beaucoup plus délicat; surtout si un humain se trouve au milieu.</p>
|
<p><a href="https://hackerspaces.org/"><img class="icons" src="images/logo_hackerspaces_monde.png"></a></p>
|
||||||
<p>Le LOL est une émanation du mouvement mondial <i>hackerspace</i>/<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Hacklab">hacklab</a> et se veut ouvert aux échanges et collaborations avec les autres groupes.</p>
|
<marquee direction="left" behavior="scroll" scrollamount="3" style="height:25px;width:400px;background-color:none;font-family:arial;font-size:12pt;color:#ffffff;" >none of us is smarter than all of us - nul n'est plus intelligent-e que nous tou-te-s réunis</marquee>
|
||||||
<p>En avril 2011, le LOL a rejoint les <a href="http://www.lespetitsdebrouillards.org/?rub=reseau®ion=21">Petits Débrouillards de Lyon</a>.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Contact Section -->
|
|
||||||
<section id="contact">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-12 text-center">
|
|
||||||
<h2>Contactez nous</h2>
|
|
||||||
<hr class="star-primary">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-8 col-lg-offset-2">
|
|
||||||
<form name="sentMessage" id="contactForm" novalidate>
|
|
||||||
<div class="row control-group">
|
|
||||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
|
||||||
<label>Nom</label>
|
|
||||||
<input type="text" class="form-control" placeholder="Nom" id="name" required data-validation-required-message="Entrer votre nom.">
|
|
||||||
<p class="help-block text-danger"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row control-group">
|
|
||||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
|
||||||
<label>Email</label>
|
|
||||||
<input type="email" class="form-control" placeholder="Email" id="email" required data-validation-required-message="Entrer votre email.">
|
|
||||||
<p class="help-block text-danger"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row control-group">
|
|
||||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
|
||||||
<label>Téléphone</label>
|
|
||||||
<input type="tel" class="form-control" placeholder="Téléphone" id="phone" required data-validation-required-message="Entrer votre numéro de téléphone.">
|
|
||||||
<p class="help-block text-danger"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row control-group">
|
|
||||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
|
||||||
<label>Message</label>
|
|
||||||
<textarea rows="5" class="form-control" placeholder="Message" id="message" required data-validation-required-message="Entrer votre message."></textarea>
|
|
||||||
<p class="help-block text-danger"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<div id="success"></div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="form-group col-xs-12">
|
|
||||||
<button type="submit" class="btn btn-success btn-lg">Envoyer !</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<p>Mail : contact (arobaz) labolyon (.) fr</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Footer -->
|
|
||||||
<footer class="text-center">
|
|
||||||
<div class="footer-above">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="footer-col col-md-4">
|
|
||||||
<!-- adresse -->
|
|
||||||
</div>
|
|
||||||
<div class="footer-col col-md-4">
|
|
||||||
<h3>Laboratoire Ouvert Lyonnais</h3>
|
|
||||||
<p>7 place Louis Chazette<br>69001 Lyon</p>
|
|
||||||
<p>Overture : mardi 19h30-00h</p>
|
|
||||||
<p>IRC : <a href="irc://irc.geeknode.org/labolyon">#LaboLyon</a> sur geeknode</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer-below">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
Contenu du site placé sous <a href="http://creativecommons.org/licenses/by-sa/2.0/fr/">contrat <abbr title="Creative Commons : Paternité - Partage des Conditions Initiales à l’Identique version 2.0 France">CC BY-SA 2.0 fr</abbr></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<!-- Scroll to Top Button (Only visible on small and extra-small screen sizes) -->
|
|
||||||
<div class="scroll-top page-scroll visible-xs visible-sm">
|
|
||||||
<a class="btn btn-primary" href="#page-top">
|
|
||||||
⇑
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- jQuery -->
|
<div id="content" class="grid_5 omega">
|
||||||
<script src="js/jquery.js"></script>
|
<h3>Informations</h3>
|
||||||
|
<div>
|
||||||
|
<h4>Permanence : mardis à partir de 19h00</h4>
|
||||||
|
<h4>Adresse : 7 Place Louis Chazette 69001 Lyon</h4>
|
||||||
|
</div>
|
||||||
|
<h3>Canaux</h3>
|
||||||
|
<div>
|
||||||
|
<p><a href=" https://mibbit.com/?url=irc://irc.geeknode.org/labolyon">IRC #LaboLyon sur geeknode<a/></p>
|
||||||
|
<p><a href=" https://listes.infini.fr/listes.labolyon.fr/subscribe/discussions">Liste de diffusion</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Bootstrap Core JavaScript -->
|
|
||||||
<script src="js/bootstrap.min.js"></script>
|
|
||||||
|
|
||||||
<!-- Plugin JavaScript -->
|
|
||||||
<script src="js/jquery.easing.min.js"></script>
|
|
||||||
<script src="js/classie.js"></script>
|
|
||||||
<script src="js/cbpAnimatedHeader.js"></script>
|
|
||||||
|
|
||||||
<!-- Contact Form JavaScript -->
|
</div>
|
||||||
<script src="js/jqBootstrapValidation.js"></script>
|
</div>
|
||||||
<script src="js/contact_me.js"></script>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Custom Theme JavaScript -->
|
<script type="text/javascript" src="js/jquery.stellar.min.js"></script>
|
||||||
<script src="js/freelancer.js"></script>
|
<script type="text/javascript" src="js/waypoints.min.js"></script>
|
||||||
</body>
|
<script type="text/javascript" src="js/jquery.easing.1.3.js"></script>
|
||||||
|
<script type="text/javascript" src="js/scripts.js"></script>
|
||||||
|
<!-- <script type="text/javascript" src="js/scripts.min.js"></script> -->
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
2363
js/bootstrap.js
vendored
2363
js/bootstrap.js
vendored
File diff suppressed because it is too large
Load Diff
7
js/bootstrap.min.js
vendored
7
js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,44 +0,0 @@
|
|||||||
/**
|
|
||||||
* cbpAnimatedHeader.js v1.0.0
|
|
||||||
* http://www.codrops.com
|
|
||||||
*
|
|
||||||
* Licensed under the MIT license.
|
|
||||||
* http://www.opensource.org/licenses/mit-license.php
|
|
||||||
*
|
|
||||||
* Copyright 2013, Codrops
|
|
||||||
* http://www.codrops.com
|
|
||||||
*/
|
|
||||||
var cbpAnimatedHeader = (function() {
|
|
||||||
|
|
||||||
var docElem = document.documentElement,
|
|
||||||
header = document.querySelector( '.navbar-fixed-top' ),
|
|
||||||
didScroll = false,
|
|
||||||
changeHeaderOn = 300;
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
window.addEventListener( 'scroll', function( event ) {
|
|
||||||
if( !didScroll ) {
|
|
||||||
didScroll = true;
|
|
||||||
setTimeout( scrollPage, 250 );
|
|
||||||
}
|
|
||||||
}, false );
|
|
||||||
}
|
|
||||||
|
|
||||||
function scrollPage() {
|
|
||||||
var sy = scrollY();
|
|
||||||
if ( sy >= changeHeaderOn ) {
|
|
||||||
classie.add( header, 'navbar-shrink' );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
classie.remove( header, 'navbar-shrink' );
|
|
||||||
}
|
|
||||||
didScroll = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function scrollY() {
|
|
||||||
return window.pageYOffset || docElem.scrollTop;
|
|
||||||
}
|
|
||||||
|
|
||||||
init();
|
|
||||||
|
|
||||||
})();
|
|
11
js/cbpAnimatedHeader.min.js
vendored
11
js/cbpAnimatedHeader.min.js
vendored
@ -1,11 +0,0 @@
|
|||||||
/**
|
|
||||||
* cbpAnimatedHeader.min.js v1.0.0
|
|
||||||
* http://www.codrops.com
|
|
||||||
*
|
|
||||||
* Licensed under the MIT license.
|
|
||||||
* http://www.opensource.org/licenses/mit-license.php
|
|
||||||
*
|
|
||||||
* Copyright 2013, Codrops
|
|
||||||
* http://www.codrops.com
|
|
||||||
*/
|
|
||||||
var cbpAnimatedHeader=(function(){var b=document.documentElement,g=document.querySelector(".cbp-af-header"),e=false,a=300;function f(){window.addEventListener("scroll",function(h){if(!e){e=true;setTimeout(d,250)}},false)}function d(){var h=c();if(h>=a){classie.add(g,"cbp-af-header-shrink")}else{classie.remove(g,"cbp-af-header-shrink")}e=false}function c(){return window.pageYOffset||b.scrollTop}f()})();
|
|
@ -1,80 +0,0 @@
|
|||||||
/*!
|
|
||||||
* classie - class helper functions
|
|
||||||
* from bonzo https://github.com/ded/bonzo
|
|
||||||
*
|
|
||||||
* classie.has( elem, 'my-class' ) -> true/false
|
|
||||||
* classie.add( elem, 'my-new-class' )
|
|
||||||
* classie.remove( elem, 'my-unwanted-class' )
|
|
||||||
* classie.toggle( elem, 'my-class' )
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*jshint browser: true, strict: true, undef: true */
|
|
||||||
/*global define: false */
|
|
||||||
|
|
||||||
( function( window ) {
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// class helper functions from bonzo https://github.com/ded/bonzo
|
|
||||||
|
|
||||||
function classReg( className ) {
|
|
||||||
return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
|
|
||||||
}
|
|
||||||
|
|
||||||
// classList support for class management
|
|
||||||
// altho to be fair, the api sucks because it won't accept multiple classes at once
|
|
||||||
var hasClass, addClass, removeClass;
|
|
||||||
|
|
||||||
if ( 'classList' in document.documentElement ) {
|
|
||||||
hasClass = function( elem, c ) {
|
|
||||||
return elem.classList.contains( c );
|
|
||||||
};
|
|
||||||
addClass = function( elem, c ) {
|
|
||||||
elem.classList.add( c );
|
|
||||||
};
|
|
||||||
removeClass = function( elem, c ) {
|
|
||||||
elem.classList.remove( c );
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
hasClass = function( elem, c ) {
|
|
||||||
return classReg( c ).test( elem.className );
|
|
||||||
};
|
|
||||||
addClass = function( elem, c ) {
|
|
||||||
if ( !hasClass( elem, c ) ) {
|
|
||||||
elem.className = elem.className + ' ' + c;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
removeClass = function( elem, c ) {
|
|
||||||
elem.className = elem.className.replace( classReg( c ), ' ' );
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleClass( elem, c ) {
|
|
||||||
var fn = hasClass( elem, c ) ? removeClass : addClass;
|
|
||||||
fn( elem, c );
|
|
||||||
}
|
|
||||||
|
|
||||||
var classie = {
|
|
||||||
// full names
|
|
||||||
hasClass: hasClass,
|
|
||||||
addClass: addClass,
|
|
||||||
removeClass: removeClass,
|
|
||||||
toggleClass: toggleClass,
|
|
||||||
// short names
|
|
||||||
has: hasClass,
|
|
||||||
add: addClass,
|
|
||||||
remove: removeClass,
|
|
||||||
toggle: toggleClass
|
|
||||||
};
|
|
||||||
|
|
||||||
// transport
|
|
||||||
if ( typeof define === 'function' && define.amd ) {
|
|
||||||
// AMD
|
|
||||||
define( classie );
|
|
||||||
} else {
|
|
||||||
// browser global
|
|
||||||
window.classie = classie;
|
|
||||||
}
|
|
||||||
|
|
||||||
})( window );
|
|
@ -1,73 +0,0 @@
|
|||||||
$(function() {
|
|
||||||
|
|
||||||
$("#contactForm input,#contactForm textarea").jqBootstrapValidation({
|
|
||||||
preventSubmit: true,
|
|
||||||
submitError: function($form, event, errors) {
|
|
||||||
// additional error messages or events
|
|
||||||
},
|
|
||||||
submitSuccess: function($form, event) {
|
|
||||||
// Prevent spam click and default submit behaviour
|
|
||||||
$("#btnSubmit").attr("disabled", true);
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
// get values from FORM
|
|
||||||
var name = $("input#name").val();
|
|
||||||
var email = $("input#email").val();
|
|
||||||
var phone = $("input#phone").val();
|
|
||||||
var message = $("textarea#message").val();
|
|
||||||
var firstName = name; // For Success/Failure Message
|
|
||||||
// Check for white space in name for Success/Fail message
|
|
||||||
if (firstName.indexOf(' ') >= 0) {
|
|
||||||
firstName = name.split(' ').slice(0, -1).join(' ');
|
|
||||||
}
|
|
||||||
$.ajax({
|
|
||||||
url: "././mail/contact_me.php",
|
|
||||||
type: "POST",
|
|
||||||
data: {
|
|
||||||
name: name,
|
|
||||||
phone: phone,
|
|
||||||
email: email,
|
|
||||||
message: message
|
|
||||||
},
|
|
||||||
cache: false,
|
|
||||||
success: function() {
|
|
||||||
// Enable button & show success message
|
|
||||||
$("#btnSubmit").attr("disabled", false);
|
|
||||||
$('#success').html("<div class='alert alert-success'>");
|
|
||||||
$('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
|
|
||||||
.append("</button>");
|
|
||||||
$('#success > .alert-success')
|
|
||||||
.append("<strong>Votre message à bien été envoyé. </strong>");
|
|
||||||
$('#success > .alert-success')
|
|
||||||
.append('</div>');
|
|
||||||
|
|
||||||
//clear all fields
|
|
||||||
$('#contactForm').trigger("reset");
|
|
||||||
},
|
|
||||||
error: function() {
|
|
||||||
// Fail message
|
|
||||||
$('#success').html("<div class='alert alert-danger'>");
|
|
||||||
$('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
|
|
||||||
.append("</button>");
|
|
||||||
$('#success > .alert-danger').append("<strong>Désolé " + firstName + ", il semblerait que le serveur de mail ne répond pas. Réessayer plus tard.");
|
|
||||||
$('#success > .alert-danger').append('</div>');
|
|
||||||
//clear all fields
|
|
||||||
$('#contactForm').trigger("reset");
|
|
||||||
},
|
|
||||||
})
|
|
||||||
},
|
|
||||||
filter: function() {
|
|
||||||
return $(this).is(":visible");
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
$("a[data-toggle=\"tab\"]").click(function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
$(this).tab("show");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// When clicking on Full hide fail/success boxes
|
|
||||||
$('#name').focus(function() {
|
|
||||||
$('#success').html('');
|
|
||||||
});
|
|
@ -1,37 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Start Bootstrap - Freelancer Bootstrap Theme (http://startbootstrap.com)
|
|
||||||
* Code licensed under the Apache License v2.0.
|
|
||||||
* For details, see http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// jQuery for page scrolling feature - requires jQuery Easing plugin
|
|
||||||
$(function() {
|
|
||||||
$('body').on('click', '.page-scroll a', function(event) {
|
|
||||||
var $anchor = $(this);
|
|
||||||
$('html, body').stop().animate({
|
|
||||||
scrollTop: $($anchor.attr('href')).offset().top
|
|
||||||
}, 1500, 'easeInOutExpo');
|
|
||||||
event.preventDefault();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Floating label headings for the contact form
|
|
||||||
$(function() {
|
|
||||||
$("body").on("input propertychange", ".floating-label-form-group", function(e) {
|
|
||||||
$(this).toggleClass("floating-label-form-group-with-value", !! $(e.target).val());
|
|
||||||
}).on("focus", ".floating-label-form-group", function() {
|
|
||||||
$(this).addClass("floating-label-form-group-with-focus");
|
|
||||||
}).on("blur", ".floating-label-form-group", function() {
|
|
||||||
$(this).removeClass("floating-label-form-group-with-focus");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Highlight the top nav as scrolling occurs
|
|
||||||
$('body').scrollspy({
|
|
||||||
target: '.navbar-fixed-top'
|
|
||||||
})
|
|
||||||
|
|
||||||
// Closes the Responsive Menu on Menu Item Click
|
|
||||||
$('.navbar-collapse ul li a').click(function() {
|
|
||||||
$('.navbar-toggle:visible').click();
|
|
||||||
});
|
|
@ -1,912 +0,0 @@
|
|||||||
/* jqBootstrapValidation
|
|
||||||
* A plugin for automating validation on Twitter Bootstrap formatted forms.
|
|
||||||
*
|
|
||||||
* v1.3.6
|
|
||||||
*
|
|
||||||
* License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file
|
|
||||||
*
|
|
||||||
* http://ReactiveRaven.github.com/jqBootstrapValidation/
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function( $ ){
|
|
||||||
|
|
||||||
var createdElements = [];
|
|
||||||
|
|
||||||
var defaults = {
|
|
||||||
options: {
|
|
||||||
prependExistingHelpBlock: false,
|
|
||||||
sniffHtml: true, // sniff for 'required', 'maxlength', etc
|
|
||||||
preventSubmit: true, // stop the form submit event from firing if validation fails
|
|
||||||
submitError: false, // function called if there is an error when trying to submit
|
|
||||||
submitSuccess: false, // function called just before a successful submit event is sent to the server
|
|
||||||
semanticallyStrict: false, // set to true to tidy up generated HTML output
|
|
||||||
autoAdd: {
|
|
||||||
helpBlocks: true
|
|
||||||
},
|
|
||||||
filter: function () {
|
|
||||||
// return $(this).is(":visible"); // only validate elements you can see
|
|
||||||
return true; // validate everything
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
init : function( options ) {
|
|
||||||
|
|
||||||
var settings = $.extend(true, {}, defaults);
|
|
||||||
|
|
||||||
settings.options = $.extend(true, settings.options, options);
|
|
||||||
|
|
||||||
var $siblingElements = this;
|
|
||||||
|
|
||||||
var uniqueForms = $.unique(
|
|
||||||
$siblingElements.map( function () {
|
|
||||||
return $(this).parents("form")[0];
|
|
||||||
}).toArray()
|
|
||||||
);
|
|
||||||
|
|
||||||
$(uniqueForms).bind("submit", function (e) {
|
|
||||||
var $form = $(this);
|
|
||||||
var warningsFound = 0;
|
|
||||||
var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter);
|
|
||||||
$inputs.trigger("submit.validation").trigger("validationLostFocus.validation");
|
|
||||||
|
|
||||||
$inputs.each(function (i, el) {
|
|
||||||
var $this = $(el),
|
|
||||||
$controlGroup = $this.parents(".control-group").first();
|
|
||||||
if (
|
|
||||||
$controlGroup.hasClass("warning")
|
|
||||||
) {
|
|
||||||
$controlGroup.removeClass("warning").addClass("error");
|
|
||||||
warningsFound++;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$inputs.trigger("validationLostFocus.validation");
|
|
||||||
|
|
||||||
if (warningsFound) {
|
|
||||||
if (settings.options.preventSubmit) {
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
$form.addClass("error");
|
|
||||||
if ($.isFunction(settings.options.submitError)) {
|
|
||||||
settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$form.removeClass("error");
|
|
||||||
if ($.isFunction(settings.options.submitSuccess)) {
|
|
||||||
settings.options.submitSuccess($form, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return this.each(function(){
|
|
||||||
|
|
||||||
// Get references to everything we're interested in
|
|
||||||
var $this = $(this),
|
|
||||||
$controlGroup = $this.parents(".control-group").first(),
|
|
||||||
$helpBlock = $controlGroup.find(".help-block").first(),
|
|
||||||
$form = $this.parents("form").first(),
|
|
||||||
validatorNames = [];
|
|
||||||
|
|
||||||
// create message container if not exists
|
|
||||||
if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {
|
|
||||||
$helpBlock = $('<div class="help-block" />');
|
|
||||||
$controlGroup.find('.controls').append($helpBlock);
|
|
||||||
createdElements.push($helpBlock[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// =============================================================
|
|
||||||
// SNIFF HTML FOR VALIDATORS
|
|
||||||
// =============================================================
|
|
||||||
|
|
||||||
// *snort sniff snuffle*
|
|
||||||
|
|
||||||
if (settings.options.sniffHtml) {
|
|
||||||
var message = "";
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// PATTERN
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("pattern") !== undefined) {
|
|
||||||
message = "Pas le bon format attendu<!-- data-validation-pattern-message to override -->";
|
|
||||||
if ($this.data("validationPatternMessage")) {
|
|
||||||
message = $this.data("validationPatternMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationPatternMessage", message);
|
|
||||||
$this.data("validationPatternRegex", $this.attr("pattern"));
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// MAX
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) {
|
|
||||||
var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax"));
|
|
||||||
message = "Trop grand: Maximum de '" + max + "'<!-- data-validation-max-message to override -->";
|
|
||||||
if ($this.data("validationMaxMessage")) {
|
|
||||||
message = $this.data("validationMaxMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationMaxMessage", message);
|
|
||||||
$this.data("validationMaxMax", max);
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// MIN
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) {
|
|
||||||
var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin"));
|
|
||||||
message = "Trop petit: Minimum de '" + min + "'<!-- data-validation-min-message to override -->";
|
|
||||||
if ($this.data("validationMinMessage")) {
|
|
||||||
message = $this.data("validationMinMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationMinMessage", message);
|
|
||||||
$this.data("validationMinMin", min);
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// MAXLENGTH
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("maxlength") !== undefined) {
|
|
||||||
message = "Trop grand: Maximum de '" + $this.attr("maxlength") + "' charactères<!-- data-validation-maxlength-message to override -->";
|
|
||||||
if ($this.data("validationMaxlengthMessage")) {
|
|
||||||
message = $this.data("validationMaxlengthMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationMaxlengthMessage", message);
|
|
||||||
$this.data("validationMaxlengthMaxlength", $this.attr("maxlength"));
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// MINLENGTH
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("minlength") !== undefined) {
|
|
||||||
message = "Trop court: Minimum de '" + $this.attr("minlength") + "' charactères<!-- data-validation-minlength-message to override -->";
|
|
||||||
if ($this.data("validationMinlengthMessage")) {
|
|
||||||
message = $this.data("validationMinlengthMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationMinlengthMessage", message);
|
|
||||||
$this.data("validationMinlengthMinlength", $this.attr("minlength"));
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// REQUIRED
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) {
|
|
||||||
message = settings.builtInValidators.required.message;
|
|
||||||
if ($this.data("validationRequiredMessage")) {
|
|
||||||
message = $this.data("validationRequiredMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationRequiredMessage", message);
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// NUMBER
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") {
|
|
||||||
message = settings.builtInValidators.number.message;
|
|
||||||
if ($this.data("validationNumberMessage")) {
|
|
||||||
message = $this.data("validationNumberMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationNumberMessage", message);
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// EMAIL
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") {
|
|
||||||
message = "Pas une adresse email valide<!-- data-validator-validemail-message to override -->";
|
|
||||||
if ($this.data("validationValidemailMessage")) {
|
|
||||||
message = $this.data("validationValidemailMessage");
|
|
||||||
} else if ($this.data("validationEmailMessage")) {
|
|
||||||
message = $this.data("validationEmailMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationValidemailMessage", message);
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// MINCHECKED
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("minchecked") !== undefined) {
|
|
||||||
message = "Pas assez d'options; Minimum de '" + $this.attr("minchecked") + "' requises<!-- data-validation-minchecked-message to override -->";
|
|
||||||
if ($this.data("validationMincheckedMessage")) {
|
|
||||||
message = $this.data("validationMincheckedMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationMincheckedMessage", message);
|
|
||||||
$this.data("validationMincheckedMinchecked", $this.attr("minchecked"));
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// MAXCHECKED
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
if ($this.attr("maxchecked") !== undefined) {
|
|
||||||
message = "Trop d'options; Maximum de '" + $this.attr("maxchecked") + "' requises<!-- data-validation-maxchecked-message to override -->";
|
|
||||||
if ($this.data("validationMaxcheckedMessage")) {
|
|
||||||
message = $this.data("validationMaxcheckedMessage");
|
|
||||||
}
|
|
||||||
$this.data("validationMaxcheckedMessage", message);
|
|
||||||
$this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =============================================================
|
|
||||||
// COLLECT VALIDATOR NAMES
|
|
||||||
// =============================================================
|
|
||||||
|
|
||||||
// Get named validators
|
|
||||||
if ($this.data("validation") !== undefined) {
|
|
||||||
validatorNames = $this.data("validation").split(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get extra ones defined on the element's data attributes
|
|
||||||
$.each($this.data(), function (i, el) {
|
|
||||||
var parts = i.replace(/([A-Z])/g, ",$1").split(",");
|
|
||||||
if (parts[0] === "validation" && parts[1]) {
|
|
||||||
validatorNames.push(parts[1]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// =============================================================
|
|
||||||
// NORMALISE VALIDATOR NAMES
|
|
||||||
// =============================================================
|
|
||||||
|
|
||||||
var validatorNamesToInspect = validatorNames;
|
|
||||||
var newValidatorNamesToInspect = [];
|
|
||||||
|
|
||||||
do // repeatedly expand 'shortcut' validators into their real validators
|
|
||||||
{
|
|
||||||
// Uppercase only the first letter of each name
|
|
||||||
$.each(validatorNames, function (i, el) {
|
|
||||||
validatorNames[i] = formatValidatorName(el);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Remove duplicate validator names
|
|
||||||
validatorNames = $.unique(validatorNames);
|
|
||||||
|
|
||||||
// Pull out the new validator names from each shortcut
|
|
||||||
newValidatorNamesToInspect = [];
|
|
||||||
$.each(validatorNamesToInspect, function(i, el) {
|
|
||||||
if ($this.data("validation" + el + "Shortcut") !== undefined) {
|
|
||||||
// Are these custom validators?
|
|
||||||
// Pull them out!
|
|
||||||
$.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) {
|
|
||||||
newValidatorNamesToInspect.push(el2);
|
|
||||||
});
|
|
||||||
} else if (settings.builtInValidators[el.toLowerCase()]) {
|
|
||||||
// Is this a recognised built-in?
|
|
||||||
// Pull it out!
|
|
||||||
var validator = settings.builtInValidators[el.toLowerCase()];
|
|
||||||
if (validator.type.toLowerCase() === "shortcut") {
|
|
||||||
$.each(validator.shortcut.split(","), function (i, el) {
|
|
||||||
el = formatValidatorName(el);
|
|
||||||
newValidatorNamesToInspect.push(el);
|
|
||||||
validatorNames.push(el);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
validatorNamesToInspect = newValidatorNamesToInspect;
|
|
||||||
|
|
||||||
} while (validatorNamesToInspect.length > 0)
|
|
||||||
|
|
||||||
// =============================================================
|
|
||||||
// SET UP VALIDATOR ARRAYS
|
|
||||||
// =============================================================
|
|
||||||
|
|
||||||
var validators = {};
|
|
||||||
|
|
||||||
$.each(validatorNames, function (i, el) {
|
|
||||||
// Set up the 'override' message
|
|
||||||
var message = $this.data("validation" + el + "Message");
|
|
||||||
var hasOverrideMessage = (message !== undefined);
|
|
||||||
var foundValidator = false;
|
|
||||||
message =
|
|
||||||
(
|
|
||||||
message
|
|
||||||
? message
|
|
||||||
: "'" + el + "' validation failed <!-- Add attribute 'data-validation-" + el.toLowerCase() + "-message' to input to change this message -->"
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
$.each(
|
|
||||||
settings.validatorTypes,
|
|
||||||
function (validatorType, validatorTemplate) {
|
|
||||||
if (validators[validatorType] === undefined) {
|
|
||||||
validators[validatorType] = [];
|
|
||||||
}
|
|
||||||
if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {
|
|
||||||
validators[validatorType].push(
|
|
||||||
$.extend(
|
|
||||||
true,
|
|
||||||
{
|
|
||||||
name: formatValidatorName(validatorTemplate.name),
|
|
||||||
message: message
|
|
||||||
},
|
|
||||||
validatorTemplate.init($this, el)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
foundValidator = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {
|
|
||||||
|
|
||||||
var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);
|
|
||||||
if (hasOverrideMessage) {
|
|
||||||
validator.message = message;
|
|
||||||
}
|
|
||||||
var validatorType = validator.type.toLowerCase();
|
|
||||||
|
|
||||||
if (validatorType === "shortcut") {
|
|
||||||
foundValidator = true;
|
|
||||||
} else {
|
|
||||||
$.each(
|
|
||||||
settings.validatorTypes,
|
|
||||||
function (validatorTemplateType, validatorTemplate) {
|
|
||||||
if (validators[validatorTemplateType] === undefined) {
|
|
||||||
validators[validatorTemplateType] = [];
|
|
||||||
}
|
|
||||||
if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {
|
|
||||||
$this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]);
|
|
||||||
validators[validatorType].push(
|
|
||||||
$.extend(
|
|
||||||
validator,
|
|
||||||
validatorTemplate.init($this, el)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
foundValidator = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! foundValidator) {
|
|
||||||
$.error("Cannot find validation info for '" + el + "'");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// =============================================================
|
|
||||||
// STORE FALLBACK VALUES
|
|
||||||
// =============================================================
|
|
||||||
|
|
||||||
$helpBlock.data(
|
|
||||||
"original-contents",
|
|
||||||
(
|
|
||||||
$helpBlock.data("original-contents")
|
|
||||||
? $helpBlock.data("original-contents")
|
|
||||||
: $helpBlock.html()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$helpBlock.data(
|
|
||||||
"original-role",
|
|
||||||
(
|
|
||||||
$helpBlock.data("original-role")
|
|
||||||
? $helpBlock.data("original-role")
|
|
||||||
: $helpBlock.attr("role")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$controlGroup.data(
|
|
||||||
"original-classes",
|
|
||||||
(
|
|
||||||
$controlGroup.data("original-clases")
|
|
||||||
? $controlGroup.data("original-classes")
|
|
||||||
: $controlGroup.attr("class")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this.data(
|
|
||||||
"original-aria-invalid",
|
|
||||||
(
|
|
||||||
$this.data("original-aria-invalid")
|
|
||||||
? $this.data("original-aria-invalid")
|
|
||||||
: $this.attr("aria-invalid")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// =============================================================
|
|
||||||
// VALIDATION
|
|
||||||
// =============================================================
|
|
||||||
|
|
||||||
$this.bind(
|
|
||||||
"validation.validation",
|
|
||||||
function (event, params) {
|
|
||||||
|
|
||||||
var value = getValue($this);
|
|
||||||
|
|
||||||
// Get a list of the errors to apply
|
|
||||||
var errorsFound = [];
|
|
||||||
|
|
||||||
$.each(validators, function (validatorType, validatorTypeArray) {
|
|
||||||
if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) {
|
|
||||||
$.each(validatorTypeArray, function (i, validator) {
|
|
||||||
if (settings.validatorTypes[validatorType].validate($this, value, validator)) {
|
|
||||||
errorsFound.push(validator.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return errorsFound;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$this.bind(
|
|
||||||
"getValidators.validation",
|
|
||||||
function () {
|
|
||||||
return validators;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// =============================================================
|
|
||||||
// WATCH FOR CHANGES
|
|
||||||
// =============================================================
|
|
||||||
$this.bind(
|
|
||||||
"submit.validation",
|
|
||||||
function () {
|
|
||||||
return $this.triggerHandler("change.validation", {submitting: true});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$this.bind(
|
|
||||||
[
|
|
||||||
"keyup",
|
|
||||||
"focus",
|
|
||||||
"blur",
|
|
||||||
"click",
|
|
||||||
"keydown",
|
|
||||||
"keypress",
|
|
||||||
"change"
|
|
||||||
].join(".validation ") + ".validation",
|
|
||||||
function (e, params) {
|
|
||||||
|
|
||||||
var value = getValue($this);
|
|
||||||
|
|
||||||
var errorsFound = [];
|
|
||||||
|
|
||||||
$controlGroup.find("input,textarea,select").each(function (i, el) {
|
|
||||||
var oldCount = errorsFound.length;
|
|
||||||
$.each($(el).triggerHandler("validation.validation", params), function (j, message) {
|
|
||||||
errorsFound.push(message);
|
|
||||||
});
|
|
||||||
if (errorsFound.length > oldCount) {
|
|
||||||
$(el).attr("aria-invalid", "true");
|
|
||||||
} else {
|
|
||||||
var original = $this.data("original-aria-invalid");
|
|
||||||
$(el).attr("aria-invalid", (original !== undefined ? original : false));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation");
|
|
||||||
|
|
||||||
errorsFound = $.unique(errorsFound.sort());
|
|
||||||
|
|
||||||
// Were there any errors?
|
|
||||||
if (errorsFound.length) {
|
|
||||||
// Better flag it up as a warning.
|
|
||||||
$controlGroup.removeClass("success error").addClass("warning");
|
|
||||||
|
|
||||||
// How many errors did we find?
|
|
||||||
if (settings.options.semanticallyStrict && errorsFound.length === 1) {
|
|
||||||
// Only one? Being strict? Just output it.
|
|
||||||
$helpBlock.html(errorsFound[0] +
|
|
||||||
( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
|
|
||||||
} else {
|
|
||||||
// Multiple? Being sloppy? Glue them together into an UL.
|
|
||||||
$helpBlock.html("<ul role=\"alert\"><li>" + errorsFound.join("</li><li>") + "</li></ul>" +
|
|
||||||
( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$controlGroup.removeClass("warning error success");
|
|
||||||
if (value.length > 0) {
|
|
||||||
$controlGroup.addClass("success");
|
|
||||||
}
|
|
||||||
$helpBlock.html($helpBlock.data("original-contents"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.type === "blur") {
|
|
||||||
$controlGroup.removeClass("success");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$this.bind("validationLostFocus.validation", function () {
|
|
||||||
$controlGroup.removeClass("success");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
destroy : function( ) {
|
|
||||||
|
|
||||||
return this.each(
|
|
||||||
function() {
|
|
||||||
|
|
||||||
var
|
|
||||||
$this = $(this),
|
|
||||||
$controlGroup = $this.parents(".control-group").first(),
|
|
||||||
$helpBlock = $controlGroup.find(".help-block").first();
|
|
||||||
|
|
||||||
// remove our events
|
|
||||||
$this.unbind('.validation'); // events are namespaced.
|
|
||||||
// reset help text
|
|
||||||
$helpBlock.html($helpBlock.data("original-contents"));
|
|
||||||
// reset classes
|
|
||||||
$controlGroup.attr("class", $controlGroup.data("original-classes"));
|
|
||||||
// reset aria
|
|
||||||
$this.attr("aria-invalid", $this.data("original-aria-invalid"));
|
|
||||||
// reset role
|
|
||||||
$helpBlock.attr("role", $this.data("original-role"));
|
|
||||||
// remove all elements we created
|
|
||||||
if (createdElements.indexOf($helpBlock[0]) > -1) {
|
|
||||||
$helpBlock.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
},
|
|
||||||
collectErrors : function(includeEmpty) {
|
|
||||||
|
|
||||||
var errorMessages = {};
|
|
||||||
this.each(function (i, el) {
|
|
||||||
var $el = $(el);
|
|
||||||
var name = $el.attr("name");
|
|
||||||
var errors = $el.triggerHandler("validation.validation", {includeEmpty: true});
|
|
||||||
errorMessages[name] = $.extend(true, errors, errorMessages[name]);
|
|
||||||
});
|
|
||||||
|
|
||||||
$.each(errorMessages, function (i, el) {
|
|
||||||
if (el.length === 0) {
|
|
||||||
delete errorMessages[i];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return errorMessages;
|
|
||||||
|
|
||||||
},
|
|
||||||
hasErrors: function() {
|
|
||||||
|
|
||||||
var errorMessages = [];
|
|
||||||
|
|
||||||
this.each(function (i, el) {
|
|
||||||
errorMessages = errorMessages.concat(
|
|
||||||
$(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : []
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
return (errorMessages.length > 0);
|
|
||||||
},
|
|
||||||
override : function (newDefaults) {
|
|
||||||
defaults = $.extend(true, defaults, newDefaults);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
validatorTypes: {
|
|
||||||
callback: {
|
|
||||||
name: "callback",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {
|
|
||||||
validatorName: name,
|
|
||||||
callback: $this.data("validation" + name + "Callback"),
|
|
||||||
lastValue: $this.val(),
|
|
||||||
lastValid: true,
|
|
||||||
lastFinished: true
|
|
||||||
};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
if (validator.lastValue === value && validator.lastFinished) {
|
|
||||||
return !validator.lastValid;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (validator.lastFinished === true)
|
|
||||||
{
|
|
||||||
validator.lastValue = value;
|
|
||||||
validator.lastValid = true;
|
|
||||||
validator.lastFinished = false;
|
|
||||||
|
|
||||||
var rrjqbvValidator = validator;
|
|
||||||
var rrjqbvThis = $this;
|
|
||||||
executeFunctionByName(
|
|
||||||
validator.callback,
|
|
||||||
window,
|
|
||||||
$this,
|
|
||||||
value,
|
|
||||||
function (data) {
|
|
||||||
if (rrjqbvValidator.lastValue === data.value) {
|
|
||||||
rrjqbvValidator.lastValid = data.valid;
|
|
||||||
if (data.message) {
|
|
||||||
rrjqbvValidator.message = data.message;
|
|
||||||
}
|
|
||||||
rrjqbvValidator.lastFinished = true;
|
|
||||||
rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message);
|
|
||||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
|
||||||
setTimeout(function () {
|
|
||||||
rrjqbvThis.trigger("change.validation");
|
|
||||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ajax: {
|
|
||||||
name: "ajax",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {
|
|
||||||
validatorName: name,
|
|
||||||
url: $this.data("validation" + name + "Ajax"),
|
|
||||||
lastValue: $this.val(),
|
|
||||||
lastValid: true,
|
|
||||||
lastFinished: true
|
|
||||||
};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
if (""+validator.lastValue === ""+value && validator.lastFinished === true) {
|
|
||||||
return validator.lastValid === false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (validator.lastFinished === true)
|
|
||||||
{
|
|
||||||
validator.lastValue = value;
|
|
||||||
validator.lastValid = true;
|
|
||||||
validator.lastFinished = false;
|
|
||||||
$.ajax({
|
|
||||||
url: validator.url,
|
|
||||||
data: "value=" + value + "&field=" + $this.attr("name"),
|
|
||||||
dataType: "json",
|
|
||||||
success: function (data) {
|
|
||||||
if (""+validator.lastValue === ""+data.value) {
|
|
||||||
validator.lastValid = !!(data.valid);
|
|
||||||
if (data.message) {
|
|
||||||
validator.message = data.message;
|
|
||||||
}
|
|
||||||
validator.lastFinished = true;
|
|
||||||
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
|
||||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
|
||||||
setTimeout(function () {
|
|
||||||
$this.trigger("change.validation");
|
|
||||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
|
||||||
}
|
|
||||||
},
|
|
||||||
failure: function () {
|
|
||||||
validator.lastValid = true;
|
|
||||||
validator.message = "ajax call failed";
|
|
||||||
validator.lastFinished = true;
|
|
||||||
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
|
||||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
|
||||||
setTimeout(function () {
|
|
||||||
$this.trigger("change.validation");
|
|
||||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
regex: {
|
|
||||||
name: "regex",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {regex: regexFromString($this.data("validation" + name + "Regex"))};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return (!validator.regex.test(value) && ! validator.negative)
|
|
||||||
|| (validator.regex.test(value) && validator.negative);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
required: {
|
|
||||||
name: "required",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return !!(value.length === 0 && ! validator.negative)
|
|
||||||
|| !!(value.length > 0 && validator.negative);
|
|
||||||
},
|
|
||||||
blockSubmit: true
|
|
||||||
},
|
|
||||||
match: {
|
|
||||||
name: "match",
|
|
||||||
init: function ($this, name) {
|
|
||||||
var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first();
|
|
||||||
element.bind("validation.validation", function () {
|
|
||||||
$this.trigger("change.validation", {submitting: true});
|
|
||||||
});
|
|
||||||
return {"element": element};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return (value !== validator.element.val() && ! validator.negative)
|
|
||||||
|| (value === validator.element.val() && validator.negative);
|
|
||||||
},
|
|
||||||
blockSubmit: true
|
|
||||||
},
|
|
||||||
max: {
|
|
||||||
name: "max",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {max: $this.data("validation" + name + "Max")};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative)
|
|
||||||
|| (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
min: {
|
|
||||||
name: "min",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {min: $this.data("validation" + name + "Min")};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative)
|
|
||||||
|| (parseFloat(value) >= parseFloat(validator.min) && validator.negative);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
maxlength: {
|
|
||||||
name: "maxlength",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {maxlength: $this.data("validation" + name + "Maxlength")};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return ((value.length > validator.maxlength) && ! validator.negative)
|
|
||||||
|| ((value.length <= validator.maxlength) && validator.negative);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
minlength: {
|
|
||||||
name: "minlength",
|
|
||||||
init: function ($this, name) {
|
|
||||||
return {minlength: $this.data("validation" + name + "Minlength")};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return ((value.length < validator.minlength) && ! validator.negative)
|
|
||||||
|| ((value.length >= validator.minlength) && validator.negative);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
maxchecked: {
|
|
||||||
name: "maxchecked",
|
|
||||||
init: function ($this, name) {
|
|
||||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
|
||||||
elements.bind("click.validation", function () {
|
|
||||||
$this.trigger("change.validation", {includeEmpty: true});
|
|
||||||
});
|
|
||||||
return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative)
|
|
||||||
|| (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative);
|
|
||||||
},
|
|
||||||
blockSubmit: true
|
|
||||||
},
|
|
||||||
minchecked: {
|
|
||||||
name: "minchecked",
|
|
||||||
init: function ($this, name) {
|
|
||||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
|
||||||
elements.bind("click.validation", function () {
|
|
||||||
$this.trigger("change.validation", {includeEmpty: true});
|
|
||||||
});
|
|
||||||
return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements};
|
|
||||||
},
|
|
||||||
validate: function ($this, value, validator) {
|
|
||||||
return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative)
|
|
||||||
|| (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative);
|
|
||||||
},
|
|
||||||
blockSubmit: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
builtInValidators: {
|
|
||||||
email: {
|
|
||||||
name: "Email",
|
|
||||||
type: "shortcut",
|
|
||||||
shortcut: "validemail"
|
|
||||||
},
|
|
||||||
validemail: {
|
|
||||||
name: "Validemail",
|
|
||||||
type: "regex",
|
|
||||||
regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}",
|
|
||||||
message: "Not a valid email address<!-- data-validator-validemail-message to override -->"
|
|
||||||
},
|
|
||||||
passwordagain: {
|
|
||||||
name: "Passwordagain",
|
|
||||||
type: "match",
|
|
||||||
match: "password",
|
|
||||||
message: "Does not match the given password<!-- data-validator-paswordagain-message to override -->"
|
|
||||||
},
|
|
||||||
positive: {
|
|
||||||
name: "Positive",
|
|
||||||
type: "shortcut",
|
|
||||||
shortcut: "number,positivenumber"
|
|
||||||
},
|
|
||||||
negative: {
|
|
||||||
name: "Negative",
|
|
||||||
type: "shortcut",
|
|
||||||
shortcut: "number,negativenumber"
|
|
||||||
},
|
|
||||||
number: {
|
|
||||||
name: "Number",
|
|
||||||
type: "regex",
|
|
||||||
regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?",
|
|
||||||
message: "Must be a number<!-- data-validator-number-message to override -->"
|
|
||||||
},
|
|
||||||
integer: {
|
|
||||||
name: "Integer",
|
|
||||||
type: "regex",
|
|
||||||
regex: "[+-]?\\\d+",
|
|
||||||
message: "No decimal places allowed<!-- data-validator-integer-message to override -->"
|
|
||||||
},
|
|
||||||
positivenumber: {
|
|
||||||
name: "Positivenumber",
|
|
||||||
type: "min",
|
|
||||||
min: 0,
|
|
||||||
message: "Must be a positive number<!-- data-validator-positivenumber-message to override -->"
|
|
||||||
},
|
|
||||||
negativenumber: {
|
|
||||||
name: "Negativenumber",
|
|
||||||
type: "max",
|
|
||||||
max: 0,
|
|
||||||
message: "Must be a negative number<!-- data-validator-negativenumber-message to override -->"
|
|
||||||
},
|
|
||||||
required: {
|
|
||||||
name: "Required",
|
|
||||||
type: "required",
|
|
||||||
message: "This is required<!-- data-validator-required-message to override -->"
|
|
||||||
},
|
|
||||||
checkone: {
|
|
||||||
name: "Checkone",
|
|
||||||
type: "minchecked",
|
|
||||||
minchecked: 1,
|
|
||||||
message: "Check at least one option<!-- data-validation-checkone-message to override -->"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var formatValidatorName = function (name) {
|
|
||||||
return name
|
|
||||||
.toLowerCase()
|
|
||||||
.replace(
|
|
||||||
/(^|\s)([a-z])/g ,
|
|
||||||
function(m,p1,p2) {
|
|
||||||
return p1+p2.toUpperCase();
|
|
||||||
}
|
|
||||||
)
|
|
||||||
;
|
|
||||||
};
|
|
||||||
|
|
||||||
var getValue = function ($this) {
|
|
||||||
// Extract the value we're talking about
|
|
||||||
var value = $this.val();
|
|
||||||
var type = $this.attr("type");
|
|
||||||
if (type === "checkbox") {
|
|
||||||
value = ($this.is(":checked") ? value : "");
|
|
||||||
}
|
|
||||||
if (type === "radio") {
|
|
||||||
value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : "");
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
};
|
|
||||||
|
|
||||||
function regexFromString(inputstring) {
|
|
||||||
return new RegExp("^" + inputstring + "$");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thanks to Jason Bunting via StackOverflow.com
|
|
||||||
*
|
|
||||||
* http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
|
|
||||||
* Short link: http://tinyurl.com/executeFunctionByName
|
|
||||||
**/
|
|
||||||
function executeFunctionByName(functionName, context /*, args*/) {
|
|
||||||
var args = Array.prototype.slice.call(arguments).splice(2);
|
|
||||||
var namespaces = functionName.split(".");
|
|
||||||
var func = namespaces.pop();
|
|
||||||
for(var i = 0; i < namespaces.length; i++) {
|
|
||||||
context = context[namespaces[i]];
|
|
||||||
}
|
|
||||||
return context[func].apply(this, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
$.fn.jqBootstrapValidation = function( method ) {
|
|
||||||
|
|
||||||
if ( defaults.methods[method] ) {
|
|
||||||
return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
|
|
||||||
} else if ( typeof method === 'object' || ! method ) {
|
|
||||||
return defaults.methods.init.apply( this, arguments );
|
|
||||||
} else {
|
|
||||||
$.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' );
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
$.jqBootstrapValidation = function (options) {
|
|
||||||
$(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
})( jQuery );
|
|
205
js/jquery.easing.1.3.js
Normal file
205
js/jquery.easing.1.3.js
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
||||||
|
*
|
||||||
|
* Uses the built in easing capabilities added In jQuery 1.1
|
||||||
|
* to offer multiple easing options
|
||||||
|
*
|
||||||
|
* TERMS OF USE - jQuery Easing
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2008 George McGinley Smith
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// t: current time, b: begInnIng value, c: change In value, d: duration
|
||||||
|
jQuery.easing['jswing'] = jQuery.easing['swing'];
|
||||||
|
|
||||||
|
jQuery.extend( jQuery.easing,
|
||||||
|
{
|
||||||
|
def: 'easeOutQuad',
|
||||||
|
swing: function (x, t, b, c, d) {
|
||||||
|
//alert(jQuery.easing.default);
|
||||||
|
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
|
||||||
|
},
|
||||||
|
easeInQuad: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuad: function (x, t, b, c, d) {
|
||||||
|
return -c *(t/=d)*(t-2) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuad: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t + b;
|
||||||
|
return -c/2 * ((--t)*(t-2) - 1) + b;
|
||||||
|
},
|
||||||
|
easeInCubic: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutCubic: function (x, t, b, c, d) {
|
||||||
|
return c*((t=t/d-1)*t*t + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutCubic: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t + b;
|
||||||
|
return c/2*((t-=2)*t*t + 2) + b;
|
||||||
|
},
|
||||||
|
easeInQuart: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuart: function (x, t, b, c, d) {
|
||||||
|
return -c * ((t=t/d-1)*t*t*t - 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuart: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
|
||||||
|
return -c/2 * ((t-=2)*t*t*t - 2) + b;
|
||||||
|
},
|
||||||
|
easeInQuint: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuint: function (x, t, b, c, d) {
|
||||||
|
return c*((t=t/d-1)*t*t*t*t + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuint: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
|
||||||
|
return c/2*((t-=2)*t*t*t*t + 2) + b;
|
||||||
|
},
|
||||||
|
easeInSine: function (x, t, b, c, d) {
|
||||||
|
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
|
||||||
|
},
|
||||||
|
easeOutSine: function (x, t, b, c, d) {
|
||||||
|
return c * Math.sin(t/d * (Math.PI/2)) + b;
|
||||||
|
},
|
||||||
|
easeInOutSine: function (x, t, b, c, d) {
|
||||||
|
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
|
||||||
|
},
|
||||||
|
easeInExpo: function (x, t, b, c, d) {
|
||||||
|
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
|
||||||
|
},
|
||||||
|
easeOutExpo: function (x, t, b, c, d) {
|
||||||
|
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutExpo: function (x, t, b, c, d) {
|
||||||
|
if (t==0) return b;
|
||||||
|
if (t==d) return b+c;
|
||||||
|
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
|
||||||
|
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
|
||||||
|
},
|
||||||
|
easeInCirc: function (x, t, b, c, d) {
|
||||||
|
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
|
||||||
|
},
|
||||||
|
easeOutCirc: function (x, t, b, c, d) {
|
||||||
|
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
|
||||||
|
},
|
||||||
|
easeInOutCirc: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
|
||||||
|
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||||
|
},
|
||||||
|
easeOutElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
|
||||||
|
},
|
||||||
|
easeInOutElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||||
|
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
|
||||||
|
},
|
||||||
|
easeInBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
return c*(t/=d)*t*((s+1)*t - s) + b;
|
||||||
|
},
|
||||||
|
easeOutBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
|
||||||
|
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
|
||||||
|
},
|
||||||
|
easeInBounce: function (x, t, b, c, d) {
|
||||||
|
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
|
||||||
|
},
|
||||||
|
easeOutBounce: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d) < (1/2.75)) {
|
||||||
|
return c*(7.5625*t*t) + b;
|
||||||
|
} else if (t < (2/2.75)) {
|
||||||
|
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
|
||||||
|
} else if (t < (2.5/2.75)) {
|
||||||
|
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
|
||||||
|
} else {
|
||||||
|
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
easeInOutBounce: function (x, t, b, c, d) {
|
||||||
|
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
|
||||||
|
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* TERMS OF USE - EASING EQUATIONS
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2001 Robert Penner
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
44
js/jquery.easing.min.js
vendored
44
js/jquery.easing.min.js
vendored
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
|
||||||
*
|
|
||||||
* Uses the built in easing capabilities added In jQuery 1.1
|
|
||||||
* to offer multiple easing options
|
|
||||||
*
|
|
||||||
* TERMS OF USE - EASING EQUATIONS
|
|
||||||
*
|
|
||||||
* Open source under the BSD License.
|
|
||||||
*
|
|
||||||
* Copyright © 2001 Robert Penner
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* TERMS OF USE - jQuery Easing
|
|
||||||
*
|
|
||||||
* Open source under the BSD License.
|
|
||||||
*
|
|
||||||
* Copyright © 2008 George McGinley Smith
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
* conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
|
||||||
* or promote products derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
||||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
|
|
4
js/jquery.js
vendored
4
js/jquery.js
vendored
File diff suppressed because one or more lines are too long
2
js/jquery.stellar.min.js
vendored
Normal file
2
js/jquery.stellar.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
55
js/scripts.js
Normal file
55
js/scripts.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
jQuery(document).ready(function ($) {
|
||||||
|
|
||||||
|
|
||||||
|
$(window).stellar();
|
||||||
|
|
||||||
|
var links = $('.navigation').find('li');
|
||||||
|
slide = $('.slide');
|
||||||
|
button = $('.button');
|
||||||
|
mywindow = $(window);
|
||||||
|
htmlbody = $('html,body');
|
||||||
|
|
||||||
|
|
||||||
|
slide.waypoint(function (event, direction) {
|
||||||
|
|
||||||
|
dataslide = $(this).attr('data-slide');
|
||||||
|
|
||||||
|
if (direction === 'down') {
|
||||||
|
$('.navigation li[data-slide="' + dataslide + '"]').addClass('active').prev().removeClass('active');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$('.navigation li[data-slide="' + dataslide + '"]').addClass('active').next().removeClass('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
mywindow.scroll(function () {
|
||||||
|
if (mywindow.scrollTop() == 0) {
|
||||||
|
$('.navigation li[data-slide="1"]').addClass('active');
|
||||||
|
$('.navigation li[data-slide="2"]').removeClass('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function goToByScroll(dataslide) {
|
||||||
|
htmlbody.animate({
|
||||||
|
scrollTop: $('.slide[data-slide="' + dataslide + '"]').offset().top
|
||||||
|
}, 2000, 'easeInOutQuint');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
links.click(function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
dataslide = $(this).attr('data-slide');
|
||||||
|
goToByScroll(dataslide);
|
||||||
|
});
|
||||||
|
|
||||||
|
button.click(function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
dataslide = $(this).attr('data-slide');
|
||||||
|
goToByScroll(dataslide);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
8
js/waypoints.min.js
vendored
Normal file
8
js/waypoints.min.js
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
jQuery Waypoints - v1.1.7
|
||||||
|
Copyright (c) 2011-2012 Caleb Troughton
|
||||||
|
Dual licensed under the MIT license and GPL license.
|
||||||
|
https://github.com/imakewebthings/jquery-waypoints/blob/master/MIT-license.txt
|
||||||
|
https://github.com/imakewebthings/jquery-waypoints/blob/master/GPL-license.txt
|
||||||
|
*/
|
||||||
|
(function($,k,m,i,d){var e=$(i),g="waypoint.reached",b=function(o,n){o.element.trigger(g,n);if(o.options.triggerOnce){o.element[k]("destroy")}},h=function(p,o){if(!o){return -1}var n=o.waypoints.length-1;while(n>=0&&o.waypoints[n].element[0]!==p[0]){n-=1}return n},f=[],l=function(n){$.extend(this,{element:$(n),oldScroll:0,waypoints:[],didScroll:false,didResize:false,doScroll:$.proxy(function(){var q=this.element.scrollTop(),p=q>this.oldScroll,s=this,r=$.grep(this.waypoints,function(u,t){return p?(u.offset>s.oldScroll&&u.offset<=q):(u.offset<=s.oldScroll&&u.offset>q)}),o=r.length;if(!this.oldScroll||!q){$[m]("refresh")}this.oldScroll=q;if(!o){return}if(!p){r.reverse()}$.each(r,function(u,t){if(t.options.continuous||u===o-1){b(t,[p?"down":"up"])}})},this)});$(n).bind("scroll.waypoints",$.proxy(function(){if(!this.didScroll){this.didScroll=true;i.setTimeout($.proxy(function(){this.doScroll();this.didScroll=false},this),$[m].settings.scrollThrottle)}},this)).bind("resize.waypoints",$.proxy(function(){if(!this.didResize){this.didResize=true;i.setTimeout($.proxy(function(){$[m]("refresh");this.didResize=false},this),$[m].settings.resizeThrottle)}},this));e.load($.proxy(function(){this.doScroll()},this))},j=function(n){var o=null;$.each(f,function(p,q){if(q.element[0]===n){o=q;return false}});return o},c={init:function(o,n){this.each(function(){var u=$.fn[k].defaults.context,q,t=$(this);if(n&&n.context){u=n.context}if(!$.isWindow(u)){u=t.closest(u)[0]}q=j(u);if(!q){q=new l(u);f.push(q)}var p=h(t,q),s=p<0?$.fn[k].defaults:q.waypoints[p].options,r=$.extend({},s,n);r.offset=r.offset==="bottom-in-view"?function(){var v=$.isWindow(u)?$[m]("viewportHeight"):$(u).height();return v-$(this).outerHeight()}:r.offset;if(p<0){q.waypoints.push({element:t,offset:null,options:r})}else{q.waypoints[p].options=r}if(o){t.bind(g,o)}if(n&&n.handler){t.bind(g,n.handler)}});$[m]("refresh");return this},remove:function(){return this.each(function(o,p){var n=$(p);$.each(f,function(r,s){var q=h(n,s);if(q>=0){s.waypoints.splice(q,1);if(!s.waypoints.length){s.element.unbind("scroll.waypoints resize.waypoints");f.splice(r,1)}}})})},destroy:function(){return this.unbind(g)[k]("remove")}},a={refresh:function(){$.each(f,function(r,s){var q=$.isWindow(s.element[0]),n=q?0:s.element.offset().top,p=q?$[m]("viewportHeight"):s.element.height(),o=q?0:s.element.scrollTop();$.each(s.waypoints,function(u,x){if(!x){return}var t=x.options.offset,w=x.offset;if(typeof x.options.offset==="function"){t=x.options.offset.apply(x.element)}else{if(typeof x.options.offset==="string"){var v=parseFloat(x.options.offset);t=x.options.offset.indexOf("%")?Math.ceil(p*(v/100)):v}}x.offset=x.element.offset().top-n+o-t;if(x.options.onlyOnScroll){return}if(w!==null&&s.oldScroll>w&&s.oldScroll<=x.offset){b(x,["up"])}else{if(w!==null&&s.oldScroll<w&&s.oldScroll>=x.offset){b(x,["down"])}else{if(!w&&s.element.scrollTop()>x.offset){b(x,["down"])}}}});s.waypoints.sort(function(u,t){return u.offset-t.offset})})},viewportHeight:function(){return(i.innerHeight?i.innerHeight:e.height())},aggregate:function(){var n=$();$.each(f,function(o,p){$.each(p.waypoints,function(q,r){n=n.add(r.element)})});return n}};$.fn[k]=function(n){if(c[n]){return c[n].apply(this,Array.prototype.slice.call(arguments,1))}else{if(typeof n==="function"||!n){return c.init.apply(this,arguments)}else{if(typeof n==="object"){return c.init.apply(this,[null,n])}else{$.error("Method "+n+" does not exist on jQuery "+k)}}}};$.fn[k].defaults={continuous:true,offset:0,triggerOnce:false,context:i};$[m]=function(n){if(a[n]){return a[n].apply(this)}else{return a.aggregate()}};$[m].settings={resizeThrottle:200,scrollThrottle:100};e.load(function(){$[m]("refresh")})})(jQuery,"waypoint","waypoints",window);
|
@ -1,28 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Check for empty fields
|
|
||||||
if(empty($_POST['name']) ||
|
|
||||||
empty($_POST['email']) ||
|
|
||||||
empty($_POST['phone']) ||
|
|
||||||
empty($_POST['message']) ||
|
|
||||||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
|
|
||||||
{
|
|
||||||
echo "Completer tous les champs";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$name = $_POST['name'];
|
|
||||||
$email_address = $_POST['email'];
|
|
||||||
$phone = $_POST['phone'];
|
|
||||||
$message = $_POST['message'];
|
|
||||||
|
|
||||||
$to = 'contact@labolyon.fr';
|
|
||||||
$email_subject = "[Site] Contact de : $name";
|
|
||||||
$email_body = "Vous avez recu un message depuis le formulaire du site.\n\n"."Voici les details :\n\nNom : $name\n\nEmail : $email_address\n\nTelephone : $phone\n\nMessage :\n$message";
|
|
||||||
$headers = "From: noreply@labolyon.fr\n";
|
|
||||||
$headers .= "Reply-To: $email_address\n";
|
|
||||||
$headers .= "Date: ".date("r")."\n";
|
|
||||||
$headers .= "Content-Type: text/plain; charset=UTF-8\n";
|
|
||||||
$headers .= "MIME-Version: 1.0\n";
|
|
||||||
mail($to,$email_subject,$email_body,$headers);
|
|
||||||
return true;
|
|
||||||
?>
|
|
@ -1,5 +0,0 @@
|
|||||||
# Maquette V2
|
|
||||||
|
|
||||||
Ce document a pour but de centraliser les intentions et idées au sujet de la future maquette du LOL.
|
|
||||||
|
|
||||||
[Aperçu](http://lyonlibreweb.org/lol_beta/)
|
|
BIN
videos/background_sound.mp4
Normal file
BIN
videos/background_sound.mp4
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user