|
|
(525 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
− | | + | {{ZJU-China}} |
− | <html> | + | <html lang="en"> |
| <head> | | <head> |
− | <meta charset="utf-8" />
| + | <style type="text/css"> |
− | <title></title> | + | |
− | <!--link rel="stylesheet" href="css/style.css" /> | + | |
− | <link rel="stylesheet" href="css/bootstrap.min.css" /> | + | |
− | <link rel="stylesheet" href="css/bootstrap-theme.min.css"> | + | </style> |
− | <link rel="stylesheet" href="css/font-awesome.min.css"> | + | <meta charset="{CHARSET}"> |
− | <link rel="stylesheet" type="text/css" href="css/zzsc.css"> | + | <link rel="stylesheet" type="text/css" href="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/bootstrapCSS&action=raw&ctype=text/css" /> |
− | <link rel="stylesheet" type="text/css" href="dist/jquery.vm-carousel.css"> | + | <link rel="stylesheet" type="text/css" href="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/pageCSS&action=raw&ctype=text/css" /> |
− | <script src="js/modernizr.js"></script--> | + | <link rel="stylesheet" type="text/css" href="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/sponsorCSS&action=raw&ctype=text/css" /> |
− | <style>
| + | <script type="text/javascript" src="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/bootstrapJS&action=raw&ctype=text/javascript"></script> |
− | html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption {
| + | <script type="text/javascript" src="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/jqueryJS&action=raw&ctype=text/javascript"></script> |
− | margin: 0;
| + | <title>Improve Part</title> |
− | padding: 0;
| + | <link href="css/font-awesome.min.css" rel="stylesheet"> |
− | border: 0;
| + | <link rel="stylesheet" type="text/css" href="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/bootsnavCSS&action=raw&ctype=text/css" /> |
− | outline: 0;
| + | |
− | font-size: 100%;
| + | <style type="text/css"> |
− | vertical-align: baseline;
| + | @font-face { |
− | background: transparent;
| + | font-family: brushmagic; |
| + | src: url(https://static.igem.org/mediawiki/2018/2/2e/T--ZJU-China--Brushmagic.ttf) format('truetype'); |
| + | } |
| + | .address img |
| + | { |
| + | position:absolute; |
| + | left:0; |
| + | bottom:-15%; |
| + | width:100% !important; |
| + | } |
| + | .kite |
| + | { |
| + | z-index: 99; |
| + | position:absolute; |
| + | animation:myfirst 5s; |
| + | -moz-animation:myfirst 5s; /* Firefox */ |
| + | -webkit-animation:myfirst 5s; /* Safari and Chrome */ |
| + | -o-animation:myfirst 5s; /* Opera */ |
| + | animation-iteration-count: infinite; |
| + | width:33%; |
| + | height: 5%; |
| } | | } |
| | | |
| + | @keyframes myfirst |
| + | { |
| + | 0% {left:9.5%; top:4.2%;} |
| + | 25% {left:10%; top:4.3%;} |
| + | 50% {left:10.5%; top:4.4%;} |
| + | 75% {left:10%; top:4.3%;} |
| + | 100% {left:9.5%; top:4.2%;} |
| + | } |
| | | |
− | .nav {
| + | @-moz-keyframes myfirst /* Firefox */ |
− | width: 100%;
| + | { |
− | height: 10%;
| + | 0% {left:9.5%; top:4.2%;} |
− | position: fixed;
| + | 25% {left:10%; top:4.3%;} |
− | left: 0;
| + | 50% {left:10.5%; top:4.4%;} |
− | top: 0;
| + | 75% {left:10%; top:4.3%;} |
− | box-shadow: 0px 0px 20px 2px #8fb2c9;
| + | 100% {left:9.5%; top:4.2%;} |
− | -webkit-box-shadow: 0px 0px 20px 2px #8fb2c9;
| + | |
| } | | } |
| | | |
− | .center {
| + | @-webkit-keyframes myfirst /* Safari and Chrome */ |
− | display: -moz-box;
| + | { |
− | display: -webkit-box;
| + | 0% {left:9.5%; top:4.2%;} |
− |
| + | 25% {left:10%; top:4.3%;} |
− | -moz-box-pack: center;
| + | 50% {left:10.5%; top:4.4%;} |
− | -webkit-box-pack: center;
| + | 75% {left:10%; top:4.3%;} |
− |
| + | 100% {left:9.5%; top:4.2%;} |
− | /*-moz-box-align: center;
| + | |
− | -webkit-box-align: center;*/
| + | |
| } | | } |
| | | |
− | li {
| + | @-o-keyframes myfirst /* Opera */ |
− | display: -moz-box;
| + | { |
− | display: -webkit-box;
| + | 0% {left:9.5%; top:4.2%;} |
− |
| + | 25% {left:10%; top:4.3%;} |
− | -moz-box-align: center;
| + | 50% {left:10.5%; top:4.4%;} |
− | -webkit-box-align:center; | + | 75% {left:10%; top:4.3%;} |
| + | 100% {left:9.5%; top:4.2%;} |
| + | } |
| + | .high1 p |
| + | { |
| + | position:relative; |
| + | margin-left:52%; |
| + | margin-top:279%; |
| + | font-size:4em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-family: brushmagic !important; |
| + | font-weight: bold; |
| + | color:#d4c9af !important; |
| + | z-index:99; |
| + | } |
| + | .high1 a |
| + | { |
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-family: brushmagic !important; |
| + | font-weight: bold; |
| + | color:#d4c9af !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| + | } |
| + | .high2 p |
| + | { |
| + | position:relative; |
| + | margin-left:13%; |
| + | margin-top:24%; |
| + | font-size:4em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#c0c6d4 !important; |
| + | z-index:99; |
| + | } |
| + | .high2 a |
| + | { |
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#c0c6d4 !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| + | } |
| + | .high3 p |
| + | { |
| + | position:relative; |
| + | margin-left:57%; |
| + | margin-top:71%; |
| + | font-size:4em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#b3c0b5 !important; |
| + | z-index:99; |
| + | } |
| + | .high3 a |
| + | { |
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#b3c0b5 !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| + | } |
| + | .high4 p |
| + | { |
| + | position:relative; |
| + | margin-left:17%; |
| + | margin-top:30%; |
| + | font-size:4em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#cfb6b2 !important; |
| + | z-index:99; |
| + | } |
| + | .high4 a |
| + | { |
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#cfb6b2 !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| + | } |
| + | .a2 |
| + | { |
| + | position:absolute; |
| + | top:0 !important; |
| + | left:0; |
| + | width:100% ; |
| + | height: auto; |
| + | z-index:0; |
| + | } |
| + | .sponsors { |
| + | width: 60% !important; |
| + | /*float: center !important;*/ |
| + | position: absolute; |
| + | left:20% !important; |
| + | /*top:171% !important;*/ |
| + | bottom:-13% !important; |
| + | z-index:10; |
| + | } |
| + | .sponsors > img |
| + | { |
| + | margin-top:0 !important; |
| + | margin-bottom:5% !important; |
| } | | } |
| | | |
− | .nav_label { | + | .nav > li > a, .dropdown-toggle, .dropdown-menu > li > a { |
− | height: 100%;
| + | font-family: 'Julius Sans One', sans-serif !important; |
− | font-family: weston;
| + | } |
− | background:rgba(255,255,255,0.9);
| + | td, th { |
− | color: #1a94bc;
| + | font-size: .8em !important |
− | position: relative;
| + | } |
− | left: 0;
| + | .dropdown-menu > li > a { |
− | top: 0;
| + | font-size: .5em !important; |
− | width: 16.667%;
| + | |
− | float: left;
| + | |
− | font-size: .8em;
| + | |
− | text-align: center;
| + | |
| } | | } |
| | | |
− | .navP { | + | .igem_content_wrapper { |
− | height: 25%;
| + | width: 100% !important; |
− | width: 100%;
| + | |
− | text-align: center;
| + | |
− | position: absolute;
| + | |
− | bottom: 0;
| + | |
− | padding: 0;
| + | |
− | margin: 0;
| + | |
− | left: 0;
| + | |
| } | | } |
| | | |
− | .navImg { | + | .igem_2018_team_content { |
− | /*position: absolute;*/
| + | width: 100% !important; |
− | display: -moz-box;
| + | |
− | display: -webkit-box;
| + | |
− |
| + | |
− | -moz-box-align: center;
| + | |
− | -webkit-box-align: center;
| + | |
− |
| + | |
− | height: 70%;
| + | |
− | width: auto;
| + | |
− | background-size: 100% 100%;
| + | |
− | -webkit-background-size: 100% 100%;
| + | |
| } | | } |
| | | |
− | .nav_label:hover { | + | .igem_2018_team_menu.displaying_menu { |
− | background: #1A94BC;
| + | display: none !important; |
− | color: white;
| + | |
| } | | } |
| | | |
− | .links { | + | .firstHeading { |
− | display: block;
| + | display: none !important; |
− | width: inherit;
| + | |
− | position: absolute;
| + | |
− | top: 100%;
| + | |
− | left: 0;
| + | |
− | box-shadow: 0px 0px 10px 1px #8FB2C9;
| + | |
− | -webkit-box-shadow: 0px 0px 10px 1px #8FB2C9;
| + | |
− | background: white;
| + | |
− | overflow: hidden;
| + | |
− | display: none;
| + | |
| } | | } |
| | | |
− | ul {
| + | .title { |
− | margin: 0;
| + | display: none !important; |
− | padding: 0;
| + | |
| } | | } |
| | | |
− | .links ul li {
| + | #mw-content-text > p { |
− | width: 100%;
| + | display: none !important; |
− | float: left;
| + | |
− | font-size: 1em;
| + | |
− | color: initial;
| + | |
− | padding-left: 10px;
| + | |
| } | | } |
| | | |
− | .links ul li:hover {
| + | #HQ_page { |
− | background: #8FB2C9;
| + | width: 100% !important; |
− | color: initial;
| + | |
| } | | } |
| | | |
− | @font-face {
| + | .firstHeading { |
− | font-family: weston;
| + | display: none !important; |
− | src: url('../fonts/Weston.otf');
| + | |
| } | | } |
| | | |
− | @font-face {
| + | html, body, .globalWrapper { |
− | font-family: josefinSans;
| + | width: 100% !important; |
− | src: url('../fonts/JosefinSans.ttf');
| + | |
| } | | } |
| | | |
− | @font-face {
| + | .tl { |
− | font-family: piron; | + | font-size: 5.5em !important; |
− | src: url('../fonts/piron.woff.ttf'); | + | } |
| + | .navbar-brand{ |
| + | padding: 29px 15px; |
| + | } |
| + | nav.navbar.bootsnav{ |
| + | border: none; |
| + | margin-bottom: 150px; |
| + | } |
| + | .navbar-nav{ |
| + | float: left; |
| + | } |
| + | nav.navbar.bootsnav ul.nav > li > a{ |
| + | color: #828687; |
| + | text-transform: uppercase; |
| + | font-size: .5em !important; |
| + | /*****/ padding: 30px; |
| + | } |
| + | nav.navbar.bootsnav ul.nav > li:hover{ |
| + | background: white; |
| + | } |
| + | .nav > li:after{ |
| + | content: ""; |
| + | width: 0; |
| + | height: 5px; |
| + | background: #494e6b; |
| + | position: absolute; |
| + | bottom: 0; |
| + | left: 0; |
| + | transition: all 0.5s ease 0s; |
| + | } |
| + | |
| + | .nav > .logo:after { |
| + | background: transparent; |
| + | } |
| + | .nav > .logo:hover { |
| + | background-image: url(https://static.igem.org/mediawiki/2018/b/b0/T--ZJU-China--teamlogo.png) !important; |
| + | background: white; |
| + | background-size: 100%; |
| + | -webkit-background-size: 100%; |
| + | } |
| + | .logo { |
| + | width: 100px !important; |
| + | height: 78px; |
| + | margin-right: 30px; |
| + | background: white; |
| + | } |
| + | .logo > a{ |
| + | background: url(https://static.igem.org/mediawiki/2018/b/b0/T--ZJU-China--teamlogo.png) no-repeat; |
| + | transform: rotate(45deg); |
| + | background-color: white !important; |
| + | width: 100px !important; |
| + | height: 100px; |
| + | background-size: 100%; |
| + | -webkit-background-size: 100%; |
| + | /*border: #000000 solid 1px;*/ |
| + | box-shadow: 0 0 10px 3px black; |
| + | -webkit-box-shadow: 0 0 10px 3px black; |
| + | margin-top: 10px; |
| + | margin-left: 10px; |
| + | border-radius: 20%; |
| + | } |
| + | |
| + | .nav > li:hover:after{ |
| + | width: 100%; |
| + | } |
| + | nav.navbar.bootsnav ul.nav > li.dropdown > a.dropdown-toggle:after{ |
| + | content: "+"; |
| + | font-family: 'FontAwesome'; |
| + | font-size: 16px; |
| + | font-weight: 500; |
| + | position: absolute; |
| + | top: 31.6%; |
| + | right: 10%; |
| + | transition: all 0.4s ease 0s; |
| + | } |
| + | nav.navbar.bootsnav ul.nav > li.dropdown.on > a.dropdown-toggle:after{ |
| + | content: "^"; |
| + | font-family: 'FontAwesome'; |
| + | transform: rotate(180deg); |
| + | } |
| + | .dropdown-menu.multi-dropdown{ |
| + | position: absolute; |
| + | left: -100% !important; |
| + | } |
| + | .dropdown-menu{ |
| + | position: absolute; |
| + | left:-10%; |
| + | } |
| + | nav.navbar.bootsnav li.dropdown ul.dropdown-menu{ |
| + | box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); |
| + | border: none; |
| + | |
| + | } |
| + | @media only screen and (max-width:1030px){ |
| + | .high1 p |
| + | { |
| + | position:relative; |
| + | /*top:6000%; |
| + | left:0;*/ |
| + | margin-left:52%; |
| + | margin-top:280%; |
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#d4c9af !important; |
| + | z-index:99; |
| } | | } |
− | .head_picture | + | .high1 a |
| { | | { |
− | height: 100% !important;
| + | font-size:1em !important; |
− | width: 100% !important;
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#d4c9af !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| } | | } |
− | .head_picture img | + | .high2 p |
| { | | { |
− | height: 100%;
| + | position:relative; |
− | width:140%;
| + | margin-left:13%; |
| + | margin-top:32%; |
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#c0c6d4 !important; |
| + | z-index:99; |
| } | | } |
− | | + | .high2 a |
− | .sponsors { | + | { |
− | height: 26%;
| + | font-size:1em !important; |
− | width: 100%;
| + | font-family: brushmagic, sans-serif !important; |
− | /*border: #000000 solid 1px;*/
| + | font-weight: bold; |
− | /*position: fixed;*/
| + | color:#c0c6d4 !important; |
− | padding: 0;
| + | z-index:99; |
− | margin: 0;
| + | text-decoration: underline !important; |
− | left: 0;
| + | |
− | bottom: 0;
| + | |
− |
| + | |
| } | | } |
− | | + | .high3 p |
− | .one_slide { | + | { |
− | float: left;
| + | position:relative; |
− | width: 25%;
| + | margin-left:57%; |
− | height: 50%;
| + | margin-top:79%; |
− | /*border: dashed 1px darksalmon;*/
| + | font-size:1em !important; |
− | display: -moz-box;
| + | font-family: brushmagic, sans-serif !important; |
− | display: -webkit-box;
| + | font-weight: bold; |
− |
| + | color:#b3c0b5 !important; |
− | -moz-box-pack: center;
| + | z-index:99; |
− | -webkit-box-pack: center;
| + | |
− |
| + | |
− | -moz-box-align: center;
| + | |
− | -webkit-box-align: center;
| + | |
− | /*border: solid 1px black;*/
| + | |
| } | | } |
− | | + | .high3 a |
− | .slide_img{ | + | { |
− | width: 75% !important;
| + | font-size:1em !important; |
− | /*height: 80%;*/
| + | font-family: brushmagic, sans-serif !important; |
− | /*border: solid 1px black;*/
| + | font-weight: bold; |
− | overflow: hidden;
| + | color:#b3c0b5 !important; |
− | /*display: -moz-box;
| + | z-index:99; |
− | display: -webkit-box;
| + | text-decoration: underline !important; |
− |
| + | |
− | -moz-box-pack: center;
| + | |
− | -webkit-box-pack: center;
| + | |
− |
| + | |
− | -moz-box-align: center;
| + | |
− | -webkit-box-align: center;
| + | |
− | border: solid 1px black;*/
| + | |
| } | | } |
− | .blank | + | .high4 p |
| { | | { |
− | height: 30%;
| + | position:relative; |
− | width:100%;
| + | margin-left:17%; |
| + | margin-top:35%; |
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#cfb6b2 !important; |
| + | z-index:99; |
| } | | } |
− | | + | .high4 a |
− | .addr { | + | { |
− | /*position: fixed;*/
| + | font-size:1em !important; |
− | position: absolute;
| + | font-family: brushmagic, sans-serif !important; |
− | padding: 0;
| + | font-weight: bold; |
− | margin: 0;
| + | color:#cfb6b2 !important; |
− | bottom: 0;
| + | z-index:99; |
− | left: 0;
| + | text-decoration: underline !important; |
− | top:750%;
| + | |
− | width: 100%;
| + | |
− | height: 10%;
| + | |
− | background: #1677b3;
| + | |
| } | | } |
− |
| |
− | .addr p {
| |
− | display: -moz-box;
| |
− | display: -webkit-box;
| |
− |
| |
− | -moz-box-pack: center;
| |
− | -webkit-box-pack: center;
| |
− | -moz-box-align: center;
| |
− | -webkit-box-align: center;
| |
− |
| |
− | /*border: 1px solid black;*/
| |
− | font-family: weston;
| |
− | font-size: 1em;
| |
− | /*text-align: center;*/
| |
− | /*position: absolute;*/
| |
− | width: 100%;
| |
− | height: 100%;
| |
− | color: white;
| |
| } | | } |
− | | + | @media only screen and (max-width:700px){ |
− | .addr p a { | + | .high1 p |
− | color: white;
| + | { |
| + | position:relative; |
| + | /*top:6000%; |
| + | left:0;*/ |
| + | margin-left:52%; |
| + | margin-top:270%; |
| + | font-size:.7em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#d4c9af !important; |
| + | z-index:99; |
| } | | } |
− | | + | .high1 a |
− | .addr p a:hover { | + | { |
− | color: white;
| + | font-size:1em !important; |
− | text-decoration: underline;
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#d4c9af !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| } | | } |
− | h1,h2
| + | .high2 p |
| { | | { |
− | text-align:center;
| + | position:relative; |
| + | margin-left:14%; |
| + | margin-top:30%; |
| + | font-size:.7em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#c0c6d4 !important; |
| + | z-index:99; |
| } | | } |
− | .contents p | + | .high2 a |
| { | | { |
− | padding: 0.5cm 3cm;
| + | font-size:1em !important; |
− | font-size: 1.2em;
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#c0c6d4 !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| } | | } |
− | .picture1 | + | .high3 p |
| { | | { |
− | padding-left: 10%;
| + | position:relative; |
− | padding-bottom: 5%;
| + | margin-left:57%; |
| + | margin-top:77%; |
| + | font-size:.7em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#b3c0b5 !important; |
| + | z-index:99; |
| } | | } |
− | .picture2 | + | .high3 a |
| { | | { |
− | padding-bottom: 5%;
| + | font-size:1em !important; |
− | padding-top: 5%;
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#b3c0b5 !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| } | | } |
− | .picture3 | + | .high4 p |
| { | | { |
− | padding-left: 25%;
| + | position:relative; |
− | padding-bottom: 5%;
| + | margin-left:17%; |
| + | margin-top:33%; |
| + | font-size:.7em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#cfb6b2 !important; |
| + | z-index:99; |
| } | | } |
− | .picture4 | + | .high4 a |
| { | | { |
− | padding-left: 15%;
| + | font-size:1em !important; |
| + | font-family: brushmagic, sans-serif !important; |
| + | font-weight: bold; |
| + | color:#cfb6b2 !important; |
| + | z-index:99; |
| + | text-decoration: underline !important; |
| } | | } |
− | </style>
| + | } |
− | <style type="text/css"-->
| + | @media only screen and (max-width:990px){ |
− | | + | nav.navbar.bootsnav ul.nav > li.dropdown > a.dropdown-toggle:after, |
− | .vmc-centered{ padding: 10px 0; }
| + | nav.navbar.bootsnav ul.nav > li.dropdown.on > a.dropdown-toggle:after{ content: " "; } |
− | .vmc-centered img { transition: all 0.3s ease; }
| + | .dropdown-menu.multi-dropdown{ left: 0 !important; } |
− | .vmc-centered .vmc_active img { transform: scale(1.2); }
| + | nav.navbar.bootsnav ul.nav > li:hover{ background: transparent; } |
− | </style>
| + | nav.navbar.bootsnav ul.nav > li > a{ margin: 0; } |
| + | } |
| + | .container { |
| + | box-shadow: 0 0 10px 3px black; |
| + | -webkit-box-shadow: 0 0 10px 3px black; |
| + | } |
| + | .navbar-nav { |
| + | float: right; |
| + | } |
| + | .logo { |
| + | position: absolute; |
| + | left: -7%; |
| + | } |
| | | |
− | </head>
| + | @media only screen and (min-width: 1024px) { |
− | <body><!--script src="/demos/googlegg.js"></script-->
| + | /*改变滚动条样式*/ |
− | <!--navigator-->
| + | |
− | <div class="nav">
| + | |
− | <div class="nav_label center" id="logo">
| + | |
− | <div class="navImg" style="background-image: url(img/ZJUChina_home_logo_blue.png);" img='url(img/ZJUChina_home_logo_blue.png)'></div>
| + | |
− | <p class="navP">LOGO</p>
| + | |
− | </div>
| + | |
− | <div class="nav_label center">
| + | |
− | <div class="navImg" style="background-image: url(img/ZJUChina_home_project_blue.png);" img='url(img/ZJUChina_home_project_blue.png)' imgHover='url(img/ZJUChina_home_project_white.png)'></div>
| + | |
− | <p class="navP">Project</p>
| + | |
− | <div class="links center">
| + | |
− | <ul>
| + | |
− | <li>Overview</li>
| + | |
− | <li>design</li>
| + | |
− | <li>final results</li>
| + | |
− | <li>achievements</li>
| + | |
− | </ul>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− | <div class="nav_label center">
| + | |
− | <div class="navImg" style="background-image: url(img/ZJUChina_home_wetlab_blue.png);" img='url(img/ZJUChina_home_wetlab_blue.png)' imgHover='url(img/ZJUChina_home_wetlab_white.png)'></div>
| + | |
− | <p class="navP">Wet Lab</p>
| + | |
− | <div class="links center">
| + | |
− | <ul>
| + | |
− | <li>protocols</li>
| + | |
− | <li>notebook</li>
| + | |
− | <li>Safety</li>
| + | |
− | <li>parts</li>
| + | |
− | </ul>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− | <div class="nav_label center">
| + | |
− | <div class="navImg" style="background-image: url(img/ZJUChina_home_hardware_blue.png);" img='url(img/ZJUChina_home_hardware_blue.png)' imgHover='url(img/ZJUChina_home_hardware_white.png)'></div>
| + | |
− | <p class="navP">Results</p>
| + | |
− | <div class="links center">
| + | |
− | <ul>
| + | |
− | <li>hardware</li>
| + | |
− | <li>modeling</li>
| + | |
− | <li>software</li>
| + | |
− | <li>AI</li>
| + | |
− | </ul>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− |
| + | |
− | <div class="nav_label center">
| + | |
− | <div class="navImg" style="background-image: url(img/ZJUChina_home_HP_blue.png);" img='url(img/ZJUChina_home_HP_blue.png)' imgHover='url(img/ZJUChina_home_HP_white.png)'></div>
| + | |
− | <p class="navP">Human Practice</p>
| + | |
− | <div class="links center">
| + | |
− | <ul>
| + | |
− | <li>silver</li>
| + | |
− | <li>gold</li>
| + | |
− | <li>engagement</li>
| + | |
− | </ul>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− | <div class="nav_label center">
| + | |
− | <div class="navImg" style="background-image: url(img/ZJUChina_home_team_blue.png);" img='url(img/ZJUChina_home_team_blue.png)' imgHover='url(img/ZJUChina_home_team_white.png)'></div>
| + | |
− | <p class="navP">Team</p>
| + | |
− | <div class="links center">
| + | |
− | <ul>
| + | |
− | <li>Teammates</li>
| + | |
− | <li>Attribution</li>
| + | |
− | <li>Collaboration</li>
| + | |
− | </ul>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− |
| + | |
− | <!--head picture--> | + | |
− | <div class="head_picture">
| + | |
− | <img src="https://static.igem.org/mediawiki/2018/a/a1/T--ZJU-China--background.jpeg">
| + | |
− | </div>
| + | |
− | <!--contents-->
| + | |
− | <div class = "contents">
| + | |
− | <h1> What we do</h1>
| + | |
− | <p>This year, we are developing a project which utilizes three orthogonal connection systems to detect enzyme-catalyzed reaction products qualitatively and quantitatively. </p>
| + | |
− | <p>Although enzymes can be used in purified form, in crude cell lysates, or encased in synthetic protective materials, an approach that optimally combines the criteria of high surface area, enhanced enzyme stability, rapid mass transport, and modularity remains elusive. Recently, a brand-new protein immobilization platform has been explored. The platform modifies curli nanofibers, the amyloid fiber component of E. coli biofilms, with a peptide tag fused to the amyloidogenic protein CsgA.</p>
| + | |
− | <p>Meanwhile, a genetically programmable, irreversible immobilization method—the spontaneous covalent bond formation between 13-amino acid SpyTag and 15kDa SpyCatcher has been demonstrated. CsgA with a fused SpyTag and a certain enzyme with a SpyCatcher fusion are proved to form site-specific attachment between tags and catchers, even in a complex mixture. </p>
| + | |
− | <img class="picture1" src="img/ZJUChina_spy.png">
| + | |
− | <p>In our approach, we are going to transform PHL628-△csgA cells with pBbE1a plasmids expressing CsgA-SpyTag to cover cells with curli fibers as the base. Curli fibers will connect adjacent cells to form a biofilm(Fig.1). Then, since there are three orthogonal systems, SpyTag/SpyCatcher2, SnoopTag/SnoopCatcher and SdyTag/SdyCatcher , we are also going to synthesizing a string of three enzymes rather than one single SpyCatcher-Enzyme. The method is specifically illustrated as follows(Fig.2).</p>
| + | |
− | <img class="picture2" src="https://static.igem.org/mediawiki/2018/b/bc/T--ZJU-China--figure2.png">
| + | |
− |
| + | |
− | <h1> Where the value lies</h1>
| + | |
− | <p>One advantage is that it promises to evolve into a cell-free system with high fidelity. It is reported the biofilm displaying the same level of activity after 12 days with a slight decrease after 28 days, which indicates that the biofilm and its entangled curli fibers are stable enough.Thus, a reasonable assumption is that even if cells die, curli with SpyTag and the string of enzymes still works. In view of this advantage, the assembled system has the potential to be widely practiced in industry. </p>
| + | |
− | <p>Another advantage is that the string has a myriad of multi-enzyme systems by assigning specific functions to each enzyme at different sites. For example, a logic network composed of three enzymes, alcohol dehydrogenase (ADH, from Saccharomyces cerevisiae), glucose dehydrogenase (GDH, from Pseudomonas) and glucose oxidase (GOx, from Aspergillus niger) operating in concert as four concatenated logic gates(AND/OR) was designed to process 4 different chemical input signals (NAD, acetaldehyde, glucose and oxygen) (Fig.3). The conceived functions of the three enzymes will be discussed later. There is no exaggeration that microelements, such as domains and subunits, provide a possibility to achieve multiple functions.</p>
| + | |
− | <img class="picture3" src="https://static.igem.org/mediawiki/2018/f/f0/T--ZJU-China--figure3.png">
| + | |
− | | + | |
− | <h1> How hardware assists</h1>
| + | |
− | <h2> Microfluidic devices</h2>
| + | |
− | <p>It is acknowledged that culture of cells using various microfluidic devices is becoming more common within experimental cell biology. Based on mature technology of microfluidic cell culture, we attempt to control over experimental conditions precisely via custom designed chip architectures, parallelization, automation and direct coupling to miniaturized downstream analysis platforms. This is how purified products, the strings of three enzymes, are produced. </p>
| + | |
− | <h2> 3D printing</h2>
| + | |
− | <p>A method using ink-jet printing for constructing multi-enzyme systems was proposed. Considering the vaporization of liquids on ink-jet printers while printing, which may lead to protein denaturation and enzyme inactivation, we decided to transform a 3D printer with similar principles. The capability of 3D printer in creating a precise two-dimensional distribution of enzymes indicates a possibility of spatially controlling enzymatic reactions. </p>
| + | |
− | <h2> Biochip</h2>
| + | |
− | <p>As for the application of our model, it is diversified and remains infinite possibilities. We have already cited one application called enzyme-based logic systems above. Moreover, biochips are preferred. The original intention is to monitor enzyme-catalyzed reaction in real-time with sensitive currents which is generated by the enzymatic biofuel cells (EBFCs) and reflects the product concentration and other indicators. </p>
| + | |
− | <p>Adopting nanostructured materials for biofuel cell construction has been extensively suggested as an effective and promising strategy to achieve high energy production; nanotubes can directly connect the enzyme active centers and transport the produced electrons to the electrode along the tubular network. The bacteria growing on the nanotubes enables enzymes on the curli-connected string to close contact nanotubes, which acts as an anode. In addition, metal nanoparticles are similar in size to some enzymes, thus decreasing the electron transfer distance of the bioelectrodes. So we will interface curli fibers with gold nanoparticles(AuNPs) as well to further improve performance of EBFCs(Fig.4). Laccases with electrodes yields the cathode units of EBFCs.</p>
| + | |
− | <img class="picture4" src="https://static.igem.org/mediawiki/2018/4/44/T--ZJU-China--figure4.png">
| + | |
− | </div>
| + | |
− | | + | |
− | <img class="blank" src="img/ZJUChina_blank.jpg">
| + | |
− |
| + | |
− | | + | |
− | <!--Sponsors-->
| + | |
− | <!--div class="sponsors">
| + | |
− |
| + | |
− | <div id="carousel-example-generic" class="carousel slide one_slide" data-ride="carousel" data-pause="">
| + | |
− | <div class="carousel-inner center slide_img" >
| + | |
− | <div class="item active "><img src="img/ZJUChina_home_undergraduate.png" /></div>
| + | |
− | <div class="item "><img src="img/ZJUChina_home_cls.png" /></div>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− | <div id="carousel-example-generic" class="carousel slide one_slide" data-ride="carousel" data-pause="">
| + | |
− | <div class="carousel-inner center slide_img" style="text-align:center">
| + | |
− | <div class="item active "><img src="img/ZJUChina_home_biolab.png" /></div>
| + | |
− | <div class="item "><img src="img/ZJUChina_home_ckc.png" /></div>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− | <div id="carousel-example-generic" class="carousel slide one_slide" data-ride="carousel" data-pause="">
| + | |
− | <div class="carousel-inner center slide_img" style="text-align:center">
| + | |
− | <div class="item active "><img src="img/ZJUChina_home_foundation.png" /></div>
| + | |
− | <div class="item "><img src="img/ZJUChina_home_cs.png" /></div>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− | <div id="carousel-example-generic" class="carousel slide one_slide" data-ride="carousel" data-pause="">
| + | |
− | <div class="carousel-inner center slide_img" style="text-align:center">
| + | |
− | <div class="item active "><img src="img/ZJUChina_home_science.png" /></div>
| + | |
− | <div class="item "><img src="img/ZJUChina_home_medicine.png" /></div>
| + | |
− | </div>
| + | |
− | </div>
| + | |
− |
| + | |
− | <div class="addr">
| + | |
− | <p>Copyright © 2018 ZJU-IGEM | <a href="www.zju.edu.cn">Zhejiang University</a> |</p>
| + | |
− | </div>
| + | |
− |
| + | |
− | </div-->
| + | |
− | <div class="container">
| + | |
− | | + | |
− | <ul class="vmcarousel-centered vmc-centered">
| + | |
− | <li><img src="img/ZJUChina_home_cls.png" alt="" width="200"></li>
| + | |
− | <li><img src="img/ZJUChina_home_undergraduate.png" alt="" width="200"></li>
| + | |
− | <li><img src="img/ZJUChina_home_ckc.png" alt="" width="200"></li>
| + | |
− | <li><img src="img/ZJUChina_home_biolab.png" alt="" width="200"></li>
| + | |
− | <li><img src="img/ZJUChina_home_medicine.png" alt="" width="200"></li>
| + | |
− | <li><img src="img/ZJUChina_home_cs.png" alt="" width="200"></li>
| + | |
− | <li><img src="img/ZJUChina_home_foundation.png" alt="" width="200"></li>
| + | |
− | <li><img src="img/ZJUChina_home_science.png" alt="" width="200"></li>
| + | |
− | </ul>
| + | |
− | <div class="addr">
| + | |
− | <p>Copyright © 2018 ZJU-IGEM | <a href="www.zju.edu.cn">Zhejiang University</a> |</p>
| + | |
− | </div>
| + | |
| | | |
| + | ::-webkit-scrollbar |
| + | { |
| + | width: 12px; |
| + | height: 16px; |
| + | background-color: gray; |
| + | } |
| | | |
| + | ::-webkit-scrollbar-track |
| + | { |
| + | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); |
| + | border-radius: 10px; |
| + | background-color: whitesmoke; |
| + | } |
| | | |
| + | /*定义滑块 内阴影+圆角*/ |
| + | ::-webkit-scrollbar-thumb |
| + | { |
| + | border-radius: 10px; |
| + | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); |
| + | background-color: rgba(0, 0, 0, 0.6); |
| + | } |
| | | |
− |
| + | ::-webkit-scrollbar-thumb:hover |
| + | { |
| + | border-radius: 5px; |
| + | -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); |
| + | background: rgba(0,0,0,0.4); |
| + | } |
| + | } |
| | | |
− | </div>
| + | |
− |
| + | |
− | <script type="text/javascript" src="js/jquery-1.11.1.min.js" ></script>
| + | |
− | <!--script type="text/javascript" src="js/template.js" ></script-->
| + | |
− | <script type="text/javascript">
| + | |
− | /*!
| + | |
− | * Modernizr v2.8.3
| + | |
− | * www.modernizr.com
| + | |
− | *
| + | |
− | * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
| + | |
− | * Available under the BSD and MIT licenses: www.modernizr.com/license/
| + | |
− | */
| + | |
| | | |
− | /* | + | </style> |
− | * Modernizr tests which native CSS3 and HTML5 features are available in
| + | </head> |
− | * the current UA and makes the results available to you in two ways:
| + | <body> |
− | * as properties on a global Modernizr object, and as classes on the
| + | |
− | * <html> element. This information allows you to progressively enhance
| + | |
− | * your pages with a granular level of control over the experience.
| + | |
− | *
| + | |
− | * Modernizr has an optional (not included) conditional resource loader
| + | |
− | * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).
| + | |
− | * To get a build that includes Modernizr.load(), as well as choosing
| + | |
− | * which tests to include, go to www.modernizr.com/download/
| + | |
− | *
| + | |
− | * Authors Faruk Ates, Paul Irish, Alex Sexton
| + | |
− | * Contributors Ryan Seddon, Ben Alman
| + | |
− | */
| + | |
| | | |
− | window.Modernizr = (function( window, document, undefined ) {
| + | <div class="demo" style="width: 100%; padding: 0em 0; position: fixed; margin: 0; left:0; top: 0; z-index: 999; font-size: 1em !important"> |
| + | <div class="container"> |
| + | <div class="row"> |
| + | <div class="col-md-12"> |
| + | <nav class="navbar navbar-default navbar-mobile bootsnav"> |
| + | <div class="navbar-header"> |
| + | <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-menu">menu |
| + | <i class="fa fa-bars"></i> |
| + | </button> |
| + | </div> |
| + | <div class="collapse navbar-collapse" id="navbar-menu"> |
| + | <!--<div style="background: url(img/logo.png) no-repeat; height: 100px; width: 100px; background-size: 100% ; position: relative; margin: 0; |
| + | padding: 0; border: #000000 solid 1px;"></div>--> |
| + | <ul class="nav navbar-nav" data-in="fadeInDown" data-out="fadeOutUp"> |
| + | <li class="logo"><a href="https://2018.igem.org/Team:ZJU-China"> |
| + | <!--<img src="url(img/logo.png)" />--> |
| + | </a></li> |
| + | <li class="dropdown"> |
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown">Project</a> |
| + | <ul class="dropdown-menu"> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Demonstrate">Demonstrate</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/EnzymeScaffold">Enzyme Scaffold</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/LogicGate">Logic Gate</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Matrix">Matrix</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Electrodes">Electrodes</a></li> |
| | | |
− | var version = '2.8.3',
| |
| | | |
− | Modernizr = {},
| + | |
| + | </ul> |
| + | </li> |
| + | <li class="dropdown"> |
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown">Applied Design</a> |
| + | <ul class="dropdown-menu"> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Applied_Design">Product Design</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Hardware">Hardware</a></li> |
| | | |
− | /*>>cssclasses*/
| |
− | // option for enabling the HTML classes to be added
| |
− | enableClasses = true,
| |
− | /*>>cssclasses*/
| |
| | | |
− | docElement = document.documentElement,
| + | |
| + | </ul> |
| + | </li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Model">Model</a></li> |
| + | <li class="dropdown" style="min-width: 250px;"> |
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown">Human Practice</a> |
| + | <ul class="dropdown-menu"> |
| + | |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Human_Practices" class="dropdown-toggle" data-toggle="dropdown" >Silver&Gold</a></li> |
| + | |
| + | |
| + | |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Public_Engagement" class="dropdown-toggle" data-toggle="dropdown" >Public Engagement</a> |
| + | |
| + | </li> |
| + | |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Collaborations">Collaborations</a></li> |
| + | </ul> |
| + | </li> |
| + | <li class="dropdown"> |
| | | |
− | /**
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown">Parts</a> |
− | * Create our "modernizr" element that we do most feature tests on.
| + | <ul class="dropdown-menu"> |
− | */
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/AllParts">All parts</a></li> |
− | mod = 'modernizr',
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/BasicPart">Basic Parts</a></li> |
− | modElem = document.createElement(mod),
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/CompositePart |
− | mStyle = modElem.style,
| + | ">Composite Parts</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Collection">Collection</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Improve">Improved Parts</a></li> |
| + | </ul> |
| + | </li> |
| + | |
| + | |
| + | <li class="dropdown"> |
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown">Team</a> |
| + | <ul class="dropdown-menu"> |
| + | <li class="dropdown"> |
| | | |
− | /**
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Team">Members</a></li> |
− | * Create the input element for various Web Forms feature tests.
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Attributions">Attributions</a></li> |
− | */
| + | |
− | inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,
| + | <li class="dropdown"> |
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown" >Notebook</a> |
| + | <ul class="dropdown-menu"> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Notebook">Lab book</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Protocols">Protocols</a></li> |
| + | </ul> |
| + | </li> |
| + | </ul> |
| + | </li> |
| + | |
| | | |
− | /*>>smile*/
| + | |
− | smile = ':)',
| + | |
− | /*>>smile*/
| + | |
| | | |
− | toString = {}.toString,
| + | |
| + | |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/InterLab">InterLab</a></li> |
| + | <li><a href="https://2018.igem.org/Team:ZJU-China/Safety" class="dropdown-toggle" data-toggle="dropdown">Safety</a></li> |
| + | |
| + | |
| + | |
| + | <!--<li class="dropdown"> |
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown">Sub Menu</a> |
| + | <ul class="dropdown-menu"> |
| + | <li><a href="#">Custom Menu</a></li> |
| + | <li><a href="#">Custom Menu</a></li> |
| + | <li class="dropdown"> |
| + | <a href="#" class="dropdown-toggle" data-toggle="dropdown">Sub Menu</a> |
| + | <ul class="dropdown-menu multi-dropdown"> |
| + | <li><a href="#">Custom Menu</a></li> |
| + | <li><a href="#">Custom Menu</a></li> |
| + | <li><a href="#">Custom Menu</a></li> |
| + | <li><a href="#">Custom Menu</a></li> |
| + | </ul> |
| + | </li> |
| + | <li><a href="#">Custom Menu</a></li> |
| + | </ul> |
| + | </li>--> |
| + | </ul> |
| + | </li> |
| | | |
− | // TODO :: make the prefixes more granular
| + | </ul> |
− | /*>>prefixes*/
| + | </div> |
− | // List of property values to set for css tests. See ticket #21
| + | </nav> |
− | prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
| + | </div> |
− | /*>>prefixes*/
| + | </div> |
| + | </div> |
| + | </div> |
| | | |
− | /*>>domprefixes*/
| |
− | // Following spec is to expose vendor-specific style properties as:
| |
− | // elem.style.WebkitBorderRadius
| |
− | // and the following would be incorrect:
| |
− | // elem.style.webkitBorderRadius
| |
| | | |
− | // Webkit ghosts their properties in lowercase but Opera & Moz do not.
| |
− | // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
| |
− | // erik.eae.net/archives/2008/03/10/21.48.10/
| |
| | | |
− | // More here: github.com/Modernizr/Modernizr/issues/issue/21
| + | <!--<div class="topImg" style="background-image: url(img/improve_part.png) ;"></div>--> |
− | omPrefixes = 'Webkit Moz O ms',
| + | |
| + | |
| + | <!--<div class="element1"> |
| + | |
| + | </div>--> |
| + | |
| + | |
| + | <div class="main"> |
| + | <img class="kite" src="https://static.igem.org/mediawiki/2018/6/67/T--ZJU-China--kite.gif"> |
| + | <video controls="controls" src="https://static.igem.org/mediawiki/2018/f/f0/T--ZJU-China--mainv1.mp4" width="35%" height="auto" style="position:absolute; top:30%;margin-left:53%; border:0px solid #000000; z-index:800;"> |
| + | your browser don't support html5. |
| + | </video> |
| + | <img class="a2" src="https://static.igem.org/mediawiki/2018/4/4a/T--ZJU-China--F2.png"> |
| + | <div class="high1"><p class="high1">Highlight1: <a style="line-height:110%" href="https://2018.igem.org/Team:ZJU-China/Matrix" class="high1">Matrix</a></p> |
| + | |
| + | </div> |
| + | <div class="high2"><p class="high2">Highlight2: <a style="line-height:110%" href="https://2018.igem.org/Team:ZJU-China/EnzymeScaffold" class="high1">Protein Scaffold</a></p> |
| + | |
| + | </div> |
| + | <div class="high3"><p class="high3">Products: <a style="line-height:110%" href="https://2018.igem.org/Team:ZJU-China/Electrodes" class="high1">Electrodes</a></p> |
| + | |
| + | </div> |
| + | <div class="high4"><p class="high4"><a style="line-height:110%" href="https://2018.igem.org/Team:ZJU-China/Human_Practices" class="high1">Human Practice</a></p> |
| + | |
| + | </div> |
| | | |
− | cssomPrefixes = omPrefixes.split(' '),
| |
| | | |
− | domPrefixes = omPrefixes.toLowerCase().split(' '),
| + | |
− | /*>>domprefixes*/
| + | </div> |
| | | |
− | /*>>ns*/
| + | |
− | ns = {'svg': 'http://www.w3.org/2000/svg'},
| + | <!----> |
− | /*>>ns*/
| + | |
| + | <!----> |
| + | |
| + | <div class="sponsors"> |
| + | <!--p class="sponsor_ttl">Our Sponsors</p--> |
| + | <img src="https://static.igem.org/mediawiki/2018/6/68/T--ZJU-China--home--biolab.png" /> |
| + | <img src="https://static.igem.org/mediawiki/2018/f/f1/T--ZJU-China--genscript.png" /> |
| + | <img src="https://static.igem.org/mediawiki/2018/b/b2/T--ZJU-China--home--undergraduate.png" /> |
| + | <img src="https://static.igem.org/mediawiki/2018/5/5f/T--ZJU-China--foundation.png" /> |
| + | <img src="https://static.igem.org/mediawiki/2018/7/7f/T--ZJU-China--hospital.png" /> |
| + | </div> |
| + | |
| + | <div class="address"> |
| + | <img src="https://static.igem.org/mediawiki/2018/c/c9/T--ZJU-China--FirstPageBottom.png" /> |
| + | </div> |
| + | <!--<hr />--> |
| + | <script type="text/javascript"> |
| + | var dom = document.getElementById("container"); |
| + | var myChart = echarts.init(dom); |
| + | var app = {}; |
| + | option = null; |
| + | var dataAxis = ['', '', '', '', '']; |
| + | var data = [2993, 62815.05, 53126.97, 22837.41, 41658.86]; |
| + | var yMax = 500; |
| + | var dataShadow = []; |
| | | |
− | tests = {},
| + | for (var i = 0; i < data.length; i++) { |
− | inputs = {},
| + | dataShadow.push(yMax); |
− | attrs = {},
| + | } |
− | | + | |
− | classes = [],
| + | |
− | | + | |
− | slice = classes.slice,
| + | |
− | | + | |
− | featureName, // used in testing loop
| + | |
− | | + | |
− | | + | |
− | /*>>teststyles*/
| + | |
− | // Inject element with style element and some CSS rules
| + | |
− | injectElementWithStyles = function( rule, callback, nodes, testnames ) {
| + | |
− | | + | |
− | var style, ret, node, docOverflow,
| + | |
− | div = document.createElement('div'),
| + | |
− | // After page load injecting a fake body doesn't work so check if body exists
| + | |
− | body = document.body,
| + | |
− | // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
| + | |
− | fakeBody = body || document.createElement('body');
| + | |
− | | + | |
− | if ( parseInt(nodes, 10) ) {
| + | |
− | // In order not to give false positives we create a node for each test
| + | |
− | // This also allows the method to scale for unspecified uses
| + | |
− | while ( nodes-- ) {
| + | |
− | node = document.createElement('div');
| + | |
− | node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
| + | |
− | div.appendChild(node);
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
| + | |
− | // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
| + | |
− | // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
| + | |
− | // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
| + | |
− | // Documents served as xml will throw if using ­ so use xml friendly encoded version. See issue #277
| + | |
− | style = ['­','<style id="s', mod, '">', rule, '</style>'].join('');
| + | |
− | div.id = mod;
| + | |
− | // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
| + | |
− | // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
| + | |
− | (body ? div : fakeBody).innerHTML += style;
| + | |
− | fakeBody.appendChild(div);
| + | |
− | if ( !body ) {
| + | |
− | //avoid crashing IE8, if background image is used
| + | |
− | fakeBody.style.background = '';
| + | |
− | //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
| + | |
− | fakeBody.style.overflow = 'hidden';
| + | |
− | docOverflow = docElement.style.overflow;
| + | |
− | docElement.style.overflow = 'hidden';
| + | |
− | docElement.appendChild(fakeBody);
| + | |
− | }
| + | |
− | | + | |
− | ret = callback(div, rule);
| + | |
− | // If this is done after page load we don't want to remove the body so check if body exists
| + | |
− | if ( !body ) {
| + | |
− | fakeBody.parentNode.removeChild(fakeBody);
| + | |
− | docElement.style.overflow = docOverflow;
| + | |
− | } else {
| + | |
− | div.parentNode.removeChild(div);
| + | |
− | }
| + | |
− | | + | |
− | return !!ret;
| + | |
| | | |
| + | option = { |
| + | title: { |
| + | text: ' ', |
| + | textStyle: { |
| + | color: '#999999', |
| + | fontFamily: 'crimson', |
| + | fontWeight: 'normal', |
| + | align: 'center', |
| + | } |
| + | // subtext: 'yAxis: Absolute fluorescence unit \ OD600', |
| + | |
| }, | | }, |
− | /*>>teststyles*/ | + | xAxis: { |
− | | + | type: 'category', |
− | /*>>mq*/
| + | data: ['BBa_R0085(wild type)', 'BBa_K2721000', 'BBa_K2721001', 'BBa_K2721002', 'BBa_K2721003'], |
− | // adapted from matchMedia polyfill
| + | axisLabel: { |
− | // by Scott Jehl and Paul Irish
| + | inside: false, |
− | // gist.github.com/786768
| + | textStyle: { |
− | testMediaQuery = function( mq ) {
| + | color: '#999999' |
− | | + | |
− | var matchMedia = window.matchMedia || window.msMatchMedia;
| + | |
− | if ( matchMedia ) {
| + | |
− | return matchMedia(mq) && matchMedia(mq).matches || false;
| + | |
− | }
| + | |
− | | + | |
− | var bool;
| + | |
− | | + | |
− | injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
| + | |
− | bool = (window.getComputedStyle ? | + | |
− | getComputedStyle(node, null) :
| + | |
− | node.currentStyle)['position'] == 'absolute';
| + | |
− | });
| + | |
− | | + | |
− | return bool;
| + | |
− | | + | |
− | },
| + | |
− | /*>>mq*/
| + | |
− | | + | |
− | | + | |
− | /*>>hasevent*/
| + | |
− | //
| + | |
− | // isEventSupported determines if a given element supports the given event
| + | |
− | // kangax.github.com/iseventsupported/
| + | |
− | //
| + | |
− | // The following results are known incorrects:
| + | |
− | // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
| + | |
− | // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
| + | |
− | // ...
| + | |
− | isEventSupported = (function() {
| + | |
− | | + | |
− | var TAGNAMES = {
| + | |
− | 'select': 'input', 'change': 'input',
| + | |
− | 'submit': 'form', 'reset': 'form',
| + | |
− | 'error': 'img', 'load': 'img', 'abort': 'img'
| + | |
− | };
| + | |
− | | + | |
− | function isEventSupported( eventName, element ) {
| + | |
− | | + | |
− | element = element || document.createElement(TAGNAMES[eventName] || 'div');
| + | |
− | eventName = 'on' + eventName;
| + | |
− | | + | |
− | // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
| + | |
− | var isSupported = eventName in element;
| + | |
− | | + | |
− | if ( !isSupported ) {
| + | |
− | // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
| + | |
− | if ( !element.setAttribute ) {
| + | |
− | element = document.createElement('div'); | + | |
− | }
| + | |
− | if ( element.setAttribute && element.removeAttribute ) {
| + | |
− | element.setAttribute(eventName, '');
| + | |
− | isSupported = is(element[eventName], 'function');
| + | |
− | | + | |
− | // If property was created, "remove it" (by setting value to `undefined`)
| + | |
− | if ( !is(element[eventName], 'undefined') ) {
| + | |
− | element[eventName] = undefined;
| + | |
| } | | } |
− | element.removeAttribute(eventName);
| + | }, |
− | }
| + | axisTick: { |
− | } | + | show: false |
− | | + | }, |
− | element = null; | + | axisLine: { |
− | return isSupported;
| + | show: false |
− | }
| + | }, |
− | return isEventSupported;
| + | z: 10 |
− | })(),
| + | }, |
− | /*>>hasevent*/
| + | yAxis: { |
− | | + | name: 'Absolute fluorescence unit \ OD600', |
− | // TODO :: Add flag for hasownprop ? didn't last time
| + | nameRotate: 90, |
− | | + | nameGap: -300, |
− | // hasOwnProperty shim by kangax needed for Safari 2.0 support
| + | |
− | _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
| + | // offset: 'start', |
− | | + | axisLine: { |
− | if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
| + | show: false |
− | hasOwnProp = function (object, property) {
| + | }, |
− | return _hasOwnProperty.call(object, property); | + | axisTick: { |
− | };
| + | show: false |
− | }
| + | }, |
− | else {
| + | axisLabel: { |
− | hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
| + | textStyle: { |
− | return ((property in object) && is(object.constructor.prototype[property], 'undefined')); | + | color: '#999' |
− | };
| + | |
− | }
| + | |
− | | + | |
− | // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
| + | |
− | // es5.github.com/#x15.3.4.5
| + | |
− | | + | |
− | if (!Function.prototype.bind) {
| + | |
− | Function.prototype.bind = function bind(that) {
| + | |
− | | + | |
− | var target = this;
| + | |
− | | + | |
− | if (typeof target != "function") {
| + | |
− | throw new TypeError(); | + | |
− | } | + | |
− | | + | |
− | var args = slice.call(arguments, 1),
| + | |
− | bound = function () {
| + | |
− | | + | |
− | if (this instanceof bound) {
| + | |
− | | + | |
− | var F = function(){};
| + | |
− | F.prototype = target.prototype;
| + | |
− | var self = new F();
| + | |
− | | + | |
− | var result = target.apply(
| + | |
− | self,
| + | |
− | args.concat(slice.call(arguments))
| + | |
− | );
| + | |
− | if (Object(result) === result) {
| + | |
− | return result;
| + | |
− | }
| + | |
− | return self;
| + | |
− | | + | |
− | } else {
| + | |
− | | + | |
− | return target.apply(
| + | |
− | that,
| + | |
− | args.concat(slice.call(arguments))
| + | |
− | );
| + | |
− | | + | |
− | }
| + | |
− | | + | |
− | }; | + | |
− | | + | |
− | return bound;
| + | |
− | };
| + | |
− | } | + | |
− | | + | |
− | /** | + | |
− | * setCss applies given styles to the Modernizr DOM node.
| + | |
− | */
| + | |
− | function setCss( str ) {
| + | |
− | mStyle.cssText = str;
| + | |
− | }
| + | |
− | | + | |
− | /**
| + | |
− | * setCssAll extrapolates all vendor-specific css strings.
| + | |
− | */
| + | |
− | function setCssAll( str1, str2 ) {
| + | |
− | return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
| + | |
− | }
| + | |
− | | + | |
− | /**
| + | |
− | * is returns a boolean for if typeof obj is exactly type.
| + | |
− | */
| + | |
− | function is( obj, type ) {
| + | |
− | return typeof obj === type;
| + | |
− | }
| + | |
− | | + | |
− | /**
| + | |
− | * contains returns a boolean for if substr is found within str.
| + | |
− | */
| + | |
− | function contains( str, substr ) {
| + | |
− | return !!~('' + str).indexOf(substr);
| + | |
− | }
| + | |
− | | + | |
− | /*>>testprop*/
| + | |
− | | + | |
− | // testProps is a generic CSS / DOM property test.
| + | |
− | | + | |
− | // In testing support for a given CSS property, it's legit to test:
| + | |
− | // `elem.style[styleName] !== undefined`
| + | |
− | // If the property is supported it will return an empty string,
| + | |
− | // if unsupported it will return undefined.
| + | |
− | | + | |
− | // We'll take advantage of this quick test and skip setting a style
| + | |
− | // on our modernizr element, but instead just testing undefined vs
| + | |
− | // empty string.
| + | |
− | | + | |
− | // Because the testing of the CSS property names (with "-", as
| + | |
− | // opposed to the camelCase DOM properties) is non-portable and
| + | |
− | // non-standard but works in WebKit and IE (but not Gecko or Opera),
| + | |
− | // we explicitly reject properties with dashes so that authors
| + | |
− | // developing in WebKit or IE first don't end up with
| + | |
− | // browser-specific content by accident.
| + | |
− | | + | |
− | function testProps( props, prefixed ) {
| + | |
− | for ( var i in props ) { | + | |
− | var prop = props[i]; | + | |
− | if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
| + | |
− | return prefixed == 'pfx' ? prop : true; | + | |
| } | | } |
| } | | } |
− | return false;
| + | }, |
− | } | + | dataZoom: [ |
− | /*>>testprop*/ | + | { |
− | | + | type: 'inside' |
− | // TODO :: add testDOMProps
| + | |
− | /**
| + | |
− | * testDOMProps is a generic DOM property test; if a browser supports
| + | |
− | * a certain property, it won't return undefined for it.
| + | |
− | */
| + | |
− | function testDOMProps( props, obj, elem ) {
| + | |
− | for ( var i in props ) { | + | |
− | var item = obj[props[i]]; | + | |
− | if ( item !== undefined) {
| + | |
− | | + | |
− | // return the property name as a string
| + | |
− | if (elem === false) return props[i];
| + | |
− | | + | |
− | // let's bind a function
| + | |
− | if (is(item, 'function')){
| + | |
− | // default to autobind unless override
| + | |
− | return item.bind(elem || obj);
| + | |
− | }
| + | |
− | | + | |
− | // return the unbound function or obj or value
| + | |
− | return item;
| + | |
− | }
| + | |
| } | | } |
− | return false;
| + | ], |
− | } | + | series: [ |
− | | + | { // For shadow |
− | /*>>testallprops*/
| + | type: 'bar', |
− | /**
| + | itemStyle: { |
− | * testPropsAll tests a list of DOM properties we want to check against.
| + | normal: {color: 'rgba(0,0,0,0.05)'} |
− | * We specify literally ALL possible (known and/or likely) properties on
| + | }, |
− | * the element including the non-vendor prefixed one, for forward-
| + | barGap:'-100%', |
− | * compatibility.
| + | barCategoryGap:'80%', |
− | */
| + | data: dataShadow, |
− | function testPropsAll( prop, prefixed, elem ) {
| + | animation: false |
− | | + | }, |
− | var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
| + | { |
− | props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
| + | type: 'bar', |
− | | + | itemStyle: { |
− | // did they call .prefixed('boxSizing') or are we just testing a prop?
| + | normal: { |
− | if(is(prefixed, "string") || is(prefixed, "undefined")) {
| + | color: new echarts.graphic.LinearGradient( |
− | return testProps(props, prefixed);
| + | 0, 0, 0, 1, |
− | | + | [ |
− | // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
| + | {offset: 0, color: 'steelblue'}, |
− | } else {
| + | {offset: 0.4, color: 'steelblue'}, |
− | props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
| + | {offset: 1, color: 'steelblue'} |
− | return testDOMProps(props, prefixed, elem);
| + | ] |
− | }
| + | ) |
− | } | + | }, |
− | /*>>testallprops*/
| + | emphasis: { |
− | | + | color: new echarts.graphic.LinearGradient( |
− | | + | 0, 0, 0, 1, |
− | /**
| + | [ |
− | * Tests
| + | {offset: 0, color: 'lightsteelblue'}, |
− | * -----
| + | {offset: 0.7, color: 'lightsteelblue'}, |
− | */
| + | {offset: 1, color: 'lightsteelblue'} |
− | | + | ] |
− | // The *new* flexbox
| + | ) |
− | // dev.w3.org/csswg/css3-flexbox
| + | |
− | | + | |
− | tests['flexbox'] = function() {
| + | |
− | return testPropsAll('flexWrap');
| + | |
− | };
| + | |
− | | + | |
− | // The *old* flexbox
| + | |
− | // www.w3.org/TR/2009/WD-css3-flexbox-20090723/
| + | |
− | | + | |
− | tests['flexboxlegacy'] = function() {
| + | |
− | return testPropsAll('boxDirection'); | + | |
− | };
| + | |
− | | + | |
− | // On the S60 and BB Storm, getContext exists, but always returns undefined
| + | |
− | // so we actually have to call getContext() to verify
| + | |
− | // github.com/Modernizr/Modernizr/issues/issue/97/
| + | |
− | | + | |
− | tests['canvas'] = function() {
| + | |
− | var elem = document.createElement('canvas');
| + | |
− | return !!(elem.getContext && elem.getContext('2d'));
| + | |
− | };
| + | |
− | | + | |
− | tests['canvastext'] = function() {
| + | |
− | return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
| + | |
− | };
| + | |
− | | + | |
− | // webk.it/70117 is tracking a legit WebGL feature detect proposal
| + | |
− | | + | |
− | // We do a soft detect which may false positive in order to avoid
| + | |
− | // an expensive context creation: bugzil.la/732441
| + | |
− | | + | |
− | tests['webgl'] = function() {
| + | |
− | return !!window.WebGLRenderingContext;
| + | |
− | };
| + | |
− | | + | |
− | /*
| + | |
− | * The Modernizr.touch test only indicates if the browser supports
| + | |
− | * touch events, which does not necessarily reflect a touchscreen
| + | |
− | * device, as evidenced by tablets running Windows 7 or, alas,
| + | |
− | * the Palm Pre / WebOS (touch) phones.
| + | |
− | *
| + | |
− | * Additionally, Chrome (desktop) used to lie about its support on this,
| + | |
− | * but that has since been rectified: crbug.com/36415
| + | |
− | *
| + | |
− | * We also test for Firefox 4 Multitouch Support.
| + | |
− | *
| + | |
− | * For more info, see: modernizr.github.com/Modernizr/touch.html
| + | |
− | */
| + | |
− | | + | |
− | tests['touch'] = function() {
| + | |
− | var bool;
| + | |
− | | + | |
− | if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
| + | |
− | bool = true;
| + | |
− | } else {
| + | |
− | injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
| + | |
− | bool = node.offsetTop === 9; | + | |
− | });
| + | |
− | }
| + | |
− | | + | |
− | return bool;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | // geolocation is often considered a trivial feature detect...
| + | |
− | // Turns out, it's quite tricky to get right:
| + | |
− | //
| + | |
− | // Using !!navigator.geolocation does two things we don't want. It:
| + | |
− | // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
| + | |
− | // 2. Disables page caching in WebKit: webk.it/43956
| + | |
− | //
| + | |
− | // Meanwhile, in Firefox < 8, an about:config setting could expose
| + | |
− | // a false positive that would throw an exception: bugzil.la/688158
| + | |
− | | + | |
− | tests['geolocation'] = function() {
| + | |
− | return 'geolocation' in navigator;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['postmessage'] = function() {
| + | |
− | return !!window.postMessage;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | // Chrome incognito mode used to throw an exception when using openDatabase
| + | |
− | // It doesn't anymore.
| + | |
− | tests['websqldatabase'] = function() {
| + | |
− | return !!window.openDatabase;
| + | |
− | };
| + | |
− | | + | |
− | // Vendors had inconsistent prefixing with the experimental Indexed DB:
| + | |
− | // - Webkit's implementation is accessible through webkitIndexedDB
| + | |
− | // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
| + | |
− | // For speed, we don't test the legacy (and beta-only) indexedDB
| + | |
− | tests['indexedDB'] = function() {
| + | |
− | return !!testPropsAll("indexedDB", window);
| + | |
− | };
| + | |
− | | + | |
− | // documentMode logic from YUI to filter out IE8 Compat Mode
| + | |
− | // which false positives.
| + | |
− | tests['hashchange'] = function() {
| + | |
− | return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
| + | |
− | };
| + | |
− | | + | |
− | // Per 1.6:
| + | |
− | // This used to be Modernizr.historymanagement but the longer
| + | |
− | // name has been deprecated in favor of a shorter and property-matching one.
| + | |
− | // The old API is still available in 1.6, but as of 2.0 will throw a warning,
| + | |
− | // and in the first release thereafter disappear entirely.
| + | |
− | tests['history'] = function() {
| + | |
− | return !!(window.history && history.pushState);
| + | |
− | };
| + | |
− | | + | |
− | tests['draganddrop'] = function() {
| + | |
− | var div = document.createElement('div');
| + | |
− | return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
| + | |
− | };
| + | |
− | | + | |
− | // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
| + | |
− | // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
| + | |
− | // FF10 still uses prefixes, so check for it until then.
| + | |
− | // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
| + | |
− | tests['websockets'] = function() {
| + | |
− | return 'WebSocket' in window || 'MozWebSocket' in window;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | // css-tricks.com/rgba-browser-support/
| + | |
− | tests['rgba'] = function() {
| + | |
− | // Set an rgba() color and check the returned value
| + | |
− | | + | |
− | setCss('background-color:rgba(150,255,150,.5)');
| + | |
− | | + | |
− | return contains(mStyle.backgroundColor, 'rgba');
| + | |
− | };
| + | |
− | | + | |
− | tests['hsla'] = function() {
| + | |
− | // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
| + | |
− | // except IE9 who retains it as hsla
| + | |
− | | + | |
− | setCss('background-color:hsla(120,40%,100%,.5)');
| + | |
− | | + | |
− | return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
| + | |
− | };
| + | |
− | | + | |
− | tests['multiplebgs'] = function() {
| + | |
− | // Setting multiple images AND a color on the background shorthand property
| + | |
− | // and then querying the style.background property value for the number of
| + | |
− | // occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
| + | |
− | | + | |
− | setCss('background:url(https://),url(https://),red url(https://)');
| + | |
− | | + | |
− | // If the UA supports multiple backgrounds, there should be three occurrences
| + | |
− | // of the string "url(" in the return value for elemStyle.background
| + | |
− | | + | |
− | return (/(url\s*\(.*?){3}/).test(mStyle.background);
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | | + | |
− | // this will false positive in Opera Mini
| + | |
− | // github.com/Modernizr/Modernizr/issues/396
| + | |
− | | + | |
− | tests['backgroundsize'] = function() {
| + | |
− | return testPropsAll('backgroundSize');
| + | |
− | };
| + | |
− | | + | |
− | tests['borderimage'] = function() {
| + | |
− | return testPropsAll('borderImage');
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | // Super comprehensive table about all the unique implementations of
| + | |
− | // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance
| + | |
− | | + | |
− | tests['borderradius'] = function() {
| + | |
− | return testPropsAll('borderRadius');
| + | |
− | };
| + | |
− | | + | |
− | // WebOS unfortunately false positives on this test.
| + | |
− | tests['boxshadow'] = function() {
| + | |
− | return testPropsAll('boxShadow');
| + | |
− | };
| + | |
− | | + | |
− | // FF3.0 will false positive on this test
| + | |
− | tests['textshadow'] = function() {
| + | |
− | return document.createElement('div').style.textShadow === '';
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['opacity'] = function() {
| + | |
− | // Browsers that actually have CSS Opacity implemented have done so
| + | |
− | // according to spec, which means their return values are within the
| + | |
− | // range of [0.0,1.0] - including the leading zero.
| + | |
− | | + | |
− | setCssAll('opacity:.55');
| + | |
− | | + | |
− | // The non-literal . in this regex is intentional:
| + | |
− | // German Chrome returns this value as 0,55
| + | |
− | // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
| + | |
− | return (/^0.55$/).test(mStyle.opacity);
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | // Note, Android < 4 will pass this test, but can only animate
| + | |
− | // a single property at a time
| + | |
− | // goo.gl/v3V4Gp
| + | |
− | tests['cssanimations'] = function() {
| + | |
− | return testPropsAll('animationName');
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['csscolumns'] = function() {
| + | |
− | return testPropsAll('columnCount');
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['cssgradients'] = function() {
| + | |
− | /**
| + | |
− | * For CSS Gradients syntax, please see:
| + | |
− | * webkit.org/blog/175/introducing-css-gradients/
| + | |
− | * developer.mozilla.org/en/CSS/-moz-linear-gradient
| + | |
− | * developer.mozilla.org/en/CSS/-moz-radial-gradient
| + | |
− | * dev.w3.org/csswg/css3-images/#gradients-
| + | |
− | */
| + | |
− | | + | |
− | var str1 = 'background-image:',
| + | |
− | str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', | + | |
− | str3 = 'linear-gradient(left top,#9f9, white);'; | + | |
− | | + | |
− | setCss(
| + | |
− | // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
| + | |
− | (str1 + '-webkit- '.split(' ').join(str2 + str1) +
| + | |
− | // standard syntax // trailing 'background-image:'
| + | |
− | prefixes.join(str3 + str1)).slice(0, -str1.length)
| + | |
− | ); | + | |
− | | + | |
− | return contains(mStyle.backgroundImage, 'gradient');
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['cssreflections'] = function() {
| + | |
− | return testPropsAll('boxReflect'); | + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['csstransforms'] = function() {
| + | |
− | return !!testPropsAll('transform');
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['csstransforms3d'] = function() {
| + | |
− | | + | |
− | var ret = !!testPropsAll('perspective');
| + | |
− | | + | |
− | // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
| + | |
− | // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
| + | |
− | // some conditions. As a result, Webkit typically recognizes the syntax but
| + | |
− | // will sometimes throw a false positive, thus we must do a more thorough check:
| + | |
− | if ( ret && 'webkitPerspective' in docElement.style ) {
| + | |
− | | + | |
− | // Webkit allows this media query to succeed only if the feature is enabled.
| + | |
− | // `@media (transform-3d),(-webkit-transform-3d){ ... }`
| + | |
− | injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
| + | |
− | ret = node.offsetLeft === 9 && node.offsetHeight === 3;
| + | |
− | });
| + | |
− | }
| + | |
− | return ret;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['csstransitions'] = function() {
| + | |
− | return testPropsAll('transition');
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | /*>>fontface*/
| + | |
− | // @font-face detection routine by Diego Perini
| + | |
− | // javascript.nwbox.com/CSSSupport/
| + | |
− | | + | |
− | // false positives:
| + | |
− | // WebOS github.com/Modernizr/Modernizr/issues/342
| + | |
− | // WP7 github.com/Modernizr/Modernizr/issues/538
| + | |
− | tests['fontface'] = function() {
| + | |
− | var bool;
| + | |
− | | + | |
− | injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
| + | |
− | var style = document.getElementById('smodernizr'),
| + | |
− | sheet = style.sheet || style.styleSheet,
| + | |
− | cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
| + | |
− | | + | |
− | bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
| + | |
− | });
| + | |
− | | + | |
− | return bool;
| + | |
− | };
| + | |
− | /*>>fontface*/
| + | |
− | | + | |
− | // CSS generated content detection
| + | |
− | tests['generatedcontent'] = function() {
| + | |
− | var bool;
| + | |
− | | + | |
− | injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
| + | |
− | bool = node.offsetHeight >= 3;
| + | |
− | });
| + | |
− | | + | |
− | return bool;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | | + | |
− | // These tests evaluate support of the video/audio elements, as well as
| + | |
− | // testing what types of content they support.
| + | |
− | //
| + | |
− | // We're using the Boolean constructor here, so that we can extend the value
| + | |
− | // e.g. Modernizr.video // true
| + | |
− | // Modernizr.video.ogg // 'probably'
| + | |
− | //
| + | |
− | // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
| + | |
− | // thx to NielsLeenheer and zcorpan
| + | |
− | | + | |
− | // Note: in some older browsers, "no" was a return value instead of empty string.
| + | |
− | // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
| + | |
− | // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
| + | |
− | | + | |
− | tests['video'] = function() {
| + | |
− | var elem = document.createElement('video'),
| + | |
− | bool = false;
| + | |
− | | + | |
− | // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
| + | |
− | try {
| + | |
− | if ( bool = !!elem.canPlayType ) {
| + | |
− | bool = new Boolean(bool);
| + | |
− | bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
| + | |
− | | + | |
− | // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
| + | |
− | bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
| + | |
− | | + | |
− | bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
| + | |
− | }
| + | |
− | | + | |
− | } catch(e) { }
| + | |
− | | + | |
− | return bool;
| + | |
− | };
| + | |
− | | + | |
− | tests['audio'] = function() {
| + | |
− | var elem = document.createElement('audio'),
| + | |
− | bool = false;
| + | |
− | | + | |
− | try {
| + | |
− | if ( bool = !!elem.canPlayType ) {
| + | |
− | bool = new Boolean(bool);
| + | |
− | bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
| + | |
− | bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');
| + | |
− | | + | |
− | // Mimetypes accepted:
| + | |
− | // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
| + | |
− | // bit.ly/iphoneoscodecs
| + | |
− | bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
| + | |
− | bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
| + | |
− | elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
| + | |
− | }
| + | |
− | } catch(e) { }
| + | |
− | | + | |
− | return bool;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | // In FF4, if disabled, window.localStorage should === null.
| + | |
− | | + | |
− | // Normally, we could not test that directly and need to do a
| + | |
− | // `('localStorage' in window) && ` test first because otherwise Firefox will
| + | |
− | // throw bugzil.la/365772 if cookies are disabled
| + | |
− | | + | |
− | // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
| + | |
− | // will throw the exception:
| + | |
− | // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
| + | |
− | // Peculiarly, getItem and removeItem calls do not throw.
| + | |
− | | + | |
− | // Because we are forced to try/catch this, we'll go aggressive.
| + | |
− | | + | |
− | // Just FWIW: IE8 Compat mode supports these features completely:
| + | |
− | // www.quirksmode.org/dom/html5.html
| + | |
− | // But IE8 doesn't support either with local files
| + | |
− | | + | |
− | tests['localstorage'] = function() {
| + | |
− | try {
| + | |
− | localStorage.setItem(mod, mod);
| + | |
− | localStorage.removeItem(mod);
| + | |
− | return true;
| + | |
− | } catch(e) {
| + | |
− | return false;
| + | |
− | }
| + | |
− | };
| + | |
− | | + | |
− | tests['sessionstorage'] = function() {
| + | |
− | try {
| + | |
− | sessionStorage.setItem(mod, mod);
| + | |
− | sessionStorage.removeItem(mod);
| + | |
− | return true;
| + | |
− | } catch(e) {
| + | |
− | return false;
| + | |
− | }
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['webworkers'] = function() {
| + | |
− | return !!window.Worker;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | tests['applicationcache'] = function() {
| + | |
− | return !!window.applicationCache;
| + | |
− | };
| + | |
− | | + | |
− | | + | |
− | // Thanks to Erik Dahlstrom
| + | |
− | tests['svg'] = function() {
| + | |
− | return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
| + | |
− | };
| + | |
− | | + | |
− | // specifically for SVG inline in HTML, not within XHTML
| + | |
− | // test page: paulirish.com/demo/inline-svg
| + | |
− | tests['inlinesvg'] = function() {
| + | |
− | var div = document.createElement('div');
| + | |
− | div.innerHTML = '<svg/>';
| + | |
− | return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
| + | |
− | };
| + | |
− | | + | |
− | // SVG SMIL animation
| + | |
− | tests['smil'] = function() {
| + | |
− | return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
| + | |
− | };
| + | |
− | | + | |
− | // This test is only for clip paths in SVG proper, not clip paths on HTML content
| + | |
− | // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg
| + | |
− | | + | |
− | // However read the comments to dig into applying SVG clippaths to HTML content here:
| + | |
− | // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491
| + | |
− | tests['svgclippaths'] = function() {
| + | |
− | return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
| + | |
− | };
| + | |
− | | + | |
− | /*>>webforms*/
| + | |
− | // input features and input types go directly onto the ret object, bypassing the tests loop.
| + | |
− | // Hold this guy to execute in a moment.
| + | |
− | function webforms() {
| + | |
− | /*>>input*/
| + | |
− | // Run through HTML5's new input attributes to see if the UA understands any.
| + | |
− | // We're using f which is the <input> element created early on
| + | |
− | // Mike Taylr has created a comprehensive resource for testing these attributes
| + | |
− | // when applied to all input types:
| + | |
− | // miketaylr.com/code/input-type-attr.html
| + | |
− | // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
| + | |
− | | + | |
− | // Only input placeholder is tested while textarea's placeholder is not.
| + | |
− | // Currently Safari 4 and Opera 11 have support only for the input placeholder
| + | |
− | // Both tests are available in feature-detects/forms-placeholder.js
| + | |
− | Modernizr['input'] = (function( props ) {
| + | |
− | for ( var i = 0, len = props.length; i < len; i++ ) {
| + | |
− | attrs[ props[i] ] = !!(props[i] in inputElem);
| + | |
− | }
| + | |
− | if (attrs.list){
| + | |
− | // safari false positive's on datalist: webk.it/74252
| + | |
− | // see also github.com/Modernizr/Modernizr/issues/146
| + | |
− | attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
| + | |
− | }
| + | |
− | return attrs;
| + | |
− | })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
| + | |
− | /*>>input*/
| + | |
− | | + | |
− | /*>>inputtypes*/
| + | |
− | // Run through HTML5's new input types to see if the UA understands any.
| + | |
− | // This is put behind the tests runloop because it doesn't return a
| + | |
− | // true/false like all the other tests; instead, it returns an object
| + | |
− | // containing each input type with its corresponding true/false value
| + | |
− | | + | |
− | // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
| + | |
− | Modernizr['inputtypes'] = (function(props) {
| + | |
− | | + | |
− | for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
| + | |
− | | + | |
− | inputElem.setAttribute('type', inputElemType = props[i]);
| + | |
− | bool = inputElem.type !== 'text';
| + | |
− | | + | |
− | // We first check to see if the type we give it sticks..
| + | |
− | // If the type does, we feed it a textual value, which shouldn't be valid.
| + | |
− | // If the value doesn't stick, we know there's input sanitization which infers a custom UI
| + | |
− | if ( bool ) {
| + | |
− | | + | |
− | inputElem.value = smile;
| + | |
− | inputElem.style.cssText = 'position:absolute;visibility:hidden;';
| + | |
− | | + | |
− | if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
| + | |
− | | + | |
− | docElement.appendChild(inputElem);
| + | |
− | defaultView = document.defaultView;
| + | |
− | | + | |
− | // Safari 2-4 allows the smiley as a value, despite making a slider
| + | |
− | bool = defaultView.getComputedStyle &&
| + | |
− | defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
| + | |
− | // Mobile android web browser has false positive, so must
| + | |
− | // check the height to see if the widget is actually there.
| + | |
− | (inputElem.offsetHeight !== 0);
| + | |
− | | + | |
− | docElement.removeChild(inputElem);
| + | |
− | | + | |
− | } else if ( /^(search|tel)$/.test(inputElemType) ){
| + | |
− | // Spec doesn't define any special parsing or detectable UI
| + | |
− | // behaviors so we pass these through as true
| + | |
− | | + | |
− | // Interestingly, opera fails the earlier test, so it doesn't
| + | |
− | // even make it here.
| + | |
− | | + | |
− | } else if ( /^(url|email)$/.test(inputElemType) ) { | + | |
− | // Real url and email support comes with prebaked validation.
| + | |
− | bool = inputElem.checkValidity && inputElem.checkValidity() === false;
| + | |
− | | + | |
− | } else {
| + | |
− | // If the upgraded input compontent rejects the :) text, we got a winner
| + | |
− | bool = inputElem.value != smile;
| + | |
− | }
| + | |
| } | | } |
− | | + | }, |
− | inputs[ props[i] ] = !!bool;
| + | data: data |
− | } | + | |
− | return inputs;
| + | |
− | })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
| + | |
− | /*>>inputtypes*/
| + | |
− | }
| + | |
− | /*>>webforms*/
| + | |
− | | + | |
− | | + | |
− | // End of test definitions
| + | |
− | // -----------------------
| + | |
− | | + | |
− | | + | |
− | | + | |
− | // Run through all tests and detect their support in the current UA.
| + | |
− | // todo: hypothetically we could be doing an array of tests and use a basic loop here.
| + | |
− | for ( var feature in tests ) {
| + | |
− | if ( hasOwnProp(tests, feature) ) {
| + | |
− | // run the test, throw the return value into the Modernizr,
| + | |
− | // then based on that boolean, define an appropriate className
| + | |
− | // and push it into an array of classes we'll join later.
| + | |
− | featureName = feature.toLowerCase();
| + | |
− | Modernizr[featureName] = tests[feature]();
| + | |
− | | + | |
− | classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); | + | |
| } | | } |
− | } | + | ] |
| + | }; |
| | | |
− | /*>>webforms*/
| + | // Enable data zoom when user click bar. |
− | // input tests need to run.
| + | //var zoomSize = 6; |
− | Modernizr.input || webforms();
| + | //myChart.on('click', function (params) { |
− | /*>>webforms*/ | + | // console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]); |
| + | // myChart.dispatchAction({ |
| + | // type: 'dataZoom', |
| + | // startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)], |
| + | // endValue: dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)] |
| + | // }); |
| + | //}); |
| + | if (option && typeof option === "object") { |
| + | myChart.setOption(option, true); |
| + | } |
| + | </script> |
| + | <!--<script type="text/javascript" src="js/bootsnav.js"></script>--> |
| + | <script type="text/javascript" src="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/bootnavJS&action=raw&ctype=text/javascript"></script> |
| + | <script type="text/javascript" src="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/pageJS&action=raw&ctype=text/javascript"></script> |
| + | </body> |
| + | <link rel="stylesheet" type="text/css" href="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/pageCSS&action=raw&ctype=text/css" /> |
| + | <link rel="stylesheet" type="text/css" href="https://2018.igem.org/wiki/index.php?title=Team:ZJU-China/sponsorCSS&action=raw&ctype=text/css" /> |
| | | |
− |
| |
− | /**
| |
− | * addTest allows the user to define their own feature tests
| |
− | * the result will be added onto the Modernizr object,
| |
− | * as well as an appropriate className set on the html element
| |
− | *
| |
− | * @param feature - String naming the feature
| |
− | * @param test - Function returning true if feature is supported, false if not
| |
− | */
| |
− | Modernizr.addTest = function ( feature, test ) {
| |
− | if ( typeof feature == 'object' ) {
| |
− | for ( var key in feature ) {
| |
− | if ( hasOwnProp( feature, key ) ) {
| |
− | Modernizr.addTest( key, feature[ key ] );
| |
− | }
| |
− | }
| |
− | } else {
| |
− |
| |
− | feature = feature.toLowerCase();
| |
− |
| |
− | if ( Modernizr[feature] !== undefined ) {
| |
− | // we're going to quit if you're trying to overwrite an existing test
| |
− | // if we were to allow it, we'd do this:
| |
− | // var re = new RegExp("\\b(no-)?" + feature + "\\b");
| |
− | // docElement.className = docElement.className.replace( re, '' );
| |
− | // but, no rly, stuff 'em.
| |
− | return Modernizr;
| |
− | }
| |
− |
| |
− | test = typeof test == 'function' ? test() : test;
| |
− |
| |
− | if (typeof enableClasses !== "undefined" && enableClasses) {
| |
− | docElement.className += ' ' + (test ? '' : 'no-') + feature;
| |
− | }
| |
− | Modernizr[feature] = test;
| |
− |
| |
− | }
| |
− |
| |
− | return Modernizr; // allow chaining.
| |
− | };
| |
− |
| |
− |
| |
− | // Reset modElem.cssText to nothing to reduce memory footprint.
| |
− | setCss('');
| |
− | modElem = inputElem = null;
| |
− |
| |
− | /*>>shiv*/
| |
− | /**
| |
− | * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
| |
− | */
| |
− | ;(function(window, document) {
| |
− | /*jshint evil:true */
| |
− | /** version */
| |
− | var version = '3.7.0';
| |
− |
| |
− | /** Preset options */
| |
− | var options = window.html5 || {};
| |
− |
| |
− | /** Used to skip problem elements */
| |
− | var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
| |
− |
| |
− | /** Not all elements can be cloned in IE **/
| |
− | var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
| |
− |
| |
− | /** Detect whether the browser supports default html5 styles */
| |
− | var supportsHtml5Styles;
| |
− |
| |
− | /** Name of the expando, to work with multiple documents or to re-shiv one document */
| |
− | var expando = '_html5shiv';
| |
− |
| |
− | /** The id for the the documents expando */
| |
− | var expanID = 0;
| |
− |
| |
− | /** Cached data for each document */
| |
− | var expandoData = {};
| |
− |
| |
− | /** Detect whether the browser supports unknown elements */
| |
− | var supportsUnknownElements;
| |
− |
| |
− | (function() {
| |
− | try {
| |
− | var a = document.createElement('a');
| |
− | a.innerHTML = '<xyz></xyz>';
| |
− | //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
| |
− | supportsHtml5Styles = ('hidden' in a);
| |
− |
| |
− | supportsUnknownElements = a.childNodes.length == 1 || (function() {
| |
− | // assign a false positive if unable to shiv
| |
− | (document.createElement)('a');
| |
− | var frag = document.createDocumentFragment();
| |
− | return (
| |
− | typeof frag.cloneNode == 'undefined' ||
| |
− | typeof frag.createDocumentFragment == 'undefined' ||
| |
− | typeof frag.createElement == 'undefined'
| |
− | );
| |
− | }());
| |
− | } catch(e) {
| |
− | // assign a false positive if detection fails => unable to shiv
| |
− | supportsHtml5Styles = true;
| |
− | supportsUnknownElements = true;
| |
− | }
| |
− |
| |
− | }());
| |
− |
| |
− | /*--------------------------------------------------------------------------*/
| |
− |
| |
− | /**
| |
− | * Creates a style sheet with the given CSS text and adds it to the document.
| |
− | * @private
| |
− | * @param {Document} ownerDocument The document.
| |
− | * @param {String} cssText The CSS text.
| |
− | * @returns {StyleSheet} The style element.
| |
− | */
| |
− | function addStyleSheet(ownerDocument, cssText) {
| |
− | var p = ownerDocument.createElement('p'),
| |
− | parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
| |
− |
| |
− | p.innerHTML = 'x<style>' + cssText + '</style>';
| |
− | return parent.insertBefore(p.lastChild, parent.firstChild);
| |
− | }
| |
− |
| |
− | /**
| |
− | * Returns the value of `html5.elements` as an array.
| |
− | * @private
| |
− | * @returns {Array} An array of shived element node names.
| |
− | */
| |
− | function getElements() {
| |
− | var elements = html5.elements;
| |
− | return typeof elements == 'string' ? elements.split(' ') : elements;
| |
− | }
| |
− |
| |
− | /**
| |
− | * Returns the data associated to the given document
| |
− | * @private
| |
− | * @param {Document} ownerDocument The document.
| |
− | * @returns {Object} An object of data.
| |
− | */
| |
− | function getExpandoData(ownerDocument) {
| |
− | var data = expandoData[ownerDocument[expando]];
| |
− | if (!data) {
| |
− | data = {};
| |
− | expanID++;
| |
− | ownerDocument[expando] = expanID;
| |
− | expandoData[expanID] = data;
| |
− | }
| |
− | return data;
| |
− | }
| |
− |
| |
− | /**
| |
− | * returns a shived element for the given nodeName and document
| |
− | * @memberOf html5
| |
− | * @param {String} nodeName name of the element
| |
− | * @param {Document} ownerDocument The context document.
| |
− | * @returns {Object} The shived element.
| |
− | */
| |
− | function createElement(nodeName, ownerDocument, data){
| |
− | if (!ownerDocument) {
| |
− | ownerDocument = document;
| |
− | }
| |
− | if(supportsUnknownElements){
| |
− | return ownerDocument.createElement(nodeName);
| |
− | }
| |
− | if (!data) {
| |
− | data = getExpandoData(ownerDocument);
| |
− | }
| |
− | var node;
| |
− |
| |
− | if (data.cache[nodeName]) {
| |
− | node = data.cache[nodeName].cloneNode();
| |
− | } else if (saveClones.test(nodeName)) {
| |
− | node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
| |
− | } else {
| |
− | node = data.createElem(nodeName);
| |
− | }
| |
− |
| |
− | // Avoid adding some elements to fragments in IE < 9 because
| |
− | // * Attributes like `name` or `type` cannot be set/changed once an element
| |
− | // is inserted into a document/fragment
| |
− | // * Link elements with `src` attributes that are inaccessible, as with
| |
− | // a 403 response, will cause the tab/window to crash
| |
− | // * Script elements appended to fragments will execute when their `src`
| |
− | // or `text` property is set
| |
− | return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
| |
− | }
| |
− |
| |
− | /**
| |
− | * returns a shived DocumentFragment for the given document
| |
− | * @memberOf html5
| |
− | * @param {Document} ownerDocument The context document.
| |
− | * @returns {Object} The shived DocumentFragment.
| |
− | */
| |
− | function createDocumentFragment(ownerDocument, data){
| |
− | if (!ownerDocument) {
| |
− | ownerDocument = document;
| |
− | }
| |
− | if(supportsUnknownElements){
| |
− | return ownerDocument.createDocumentFragment();
| |
− | }
| |
− | data = data || getExpandoData(ownerDocument);
| |
− | var clone = data.frag.cloneNode(),
| |
− | i = 0,
| |
− | elems = getElements(),
| |
− | l = elems.length;
| |
− | for(;i<l;i++){
| |
− | clone.createElement(elems[i]);
| |
− | }
| |
− | return clone;
| |
− | }
| |
− |
| |
− | /**
| |
− | * Shivs the `createElement` and `createDocumentFragment` methods of the document.
| |
− | * @private
| |
− | * @param {Document|DocumentFragment} ownerDocument The document.
| |
− | * @param {Object} data of the document.
| |
− | */
| |
− | function shivMethods(ownerDocument, data) {
| |
− | if (!data.cache) {
| |
− | data.cache = {};
| |
− | data.createElem = ownerDocument.createElement;
| |
− | data.createFrag = ownerDocument.createDocumentFragment;
| |
− | data.frag = data.createFrag();
| |
− | }
| |
− |
| |
− |
| |
− | ownerDocument.createElement = function(nodeName) {
| |
− | //abort shiv
| |
− | if (!html5.shivMethods) {
| |
− | return data.createElem(nodeName);
| |
− | }
| |
− | return createElement(nodeName, ownerDocument, data);
| |
− | };
| |
− |
| |
− | ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
| |
− | 'var n=f.cloneNode(),c=n.createElement;' +
| |
− | 'h.shivMethods&&(' +
| |
− | // unroll the `createElement` calls
| |
− | getElements().join().replace(/[\w\-]+/g, function(nodeName) {
| |
− | data.createElem(nodeName);
| |
− | data.frag.createElement(nodeName);
| |
− | return 'c("' + nodeName + '")';
| |
− | }) +
| |
− | ');return n}'
| |
− | )(html5, data.frag);
| |
− | }
| |
− |
| |
− | /*--------------------------------------------------------------------------*/
| |
− |
| |
− | /**
| |
− | * Shivs the given document.
| |
− | * @memberOf html5
| |
− | * @param {Document} ownerDocument The document to shiv.
| |
− | * @returns {Document} The shived document.
| |
− | */
| |
− | function shivDocument(ownerDocument) {
| |
− | if (!ownerDocument) {
| |
− | ownerDocument = document;
| |
− | }
| |
− | var data = getExpandoData(ownerDocument);
| |
− |
| |
− | if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
| |
− | data.hasCSS = !!addStyleSheet(ownerDocument,
| |
− | // corrects block display not defined in IE6/7/8/9
| |
− | 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
| |
− | // adds styling not present in IE6/7/8/9
| |
− | 'mark{background:#FF0;color:#000}' +
| |
− | // hides non-rendered elements
| |
− | 'template{display:none}'
| |
− | );
| |
− | }
| |
− | if (!supportsUnknownElements) {
| |
− | shivMethods(ownerDocument, data);
| |
− | }
| |
− | return ownerDocument;
| |
− | }
| |
− |
| |
− | /*--------------------------------------------------------------------------*/
| |
− |
| |
− | /**
| |
− | * The `html5` object is exposed so that more elements can be shived and
| |
− | * existing shiving can be detected on iframes.
| |
− | * @type Object
| |
− | * @example
| |
− | *
| |
− | * // options can be changed before the script is included
| |
− | * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
| |
− | */
| |
− | var html5 = {
| |
− |
| |
− | /**
| |
− | * An array or space separated string of node names of the elements to shiv.
| |
− | * @memberOf html5
| |
− | * @type Array|String
| |
− | */
| |
− | 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
| |
− |
| |
− | /**
| |
− | * current version of html5shiv
| |
− | */
| |
− | 'version': version,
| |
− |
| |
− | /**
| |
− | * A flag to indicate that the HTML5 style sheet should be inserted.
| |
− | * @memberOf html5
| |
− | * @type Boolean
| |
− | */
| |
− | 'shivCSS': (options.shivCSS !== false),
| |
− |
| |
− | /**
| |
− | * Is equal to true if a browser supports creating unknown/HTML5 elements
| |
− | * @memberOf html5
| |
− | * @type boolean
| |
− | */
| |
− | 'supportsUnknownElements': supportsUnknownElements,
| |
− |
| |
− | /**
| |
− | * A flag to indicate that the document's `createElement` and `createDocumentFragment`
| |
− | * methods should be overwritten.
| |
− | * @memberOf html5
| |
− | * @type Boolean
| |
− | */
| |
− | 'shivMethods': (options.shivMethods !== false),
| |
− |
| |
− | /**
| |
− | * A string to describe the type of `html5` object ("default" or "default print").
| |
− | * @memberOf html5
| |
− | * @type String
| |
− | */
| |
− | 'type': 'default',
| |
− |
| |
− | // shivs the document according to the specified `html5` object options
| |
− | 'shivDocument': shivDocument,
| |
− |
| |
− | //creates a shived element
| |
− | createElement: createElement,
| |
− |
| |
− | //creates a shived documentFragment
| |
− | createDocumentFragment: createDocumentFragment
| |
− | };
| |
− |
| |
− | /*--------------------------------------------------------------------------*/
| |
− |
| |
− | // expose html5
| |
− | window.html5 = html5;
| |
− |
| |
− | // shiv the document
| |
− | shivDocument(document);
| |
− |
| |
− | }(this, document));
| |
− | /*>>shiv*/
| |
− |
| |
− | // Assign private properties to the return object with prefix
| |
− | Modernizr._version = version;
| |
− |
| |
− | // expose these for the plugin API. Look in the source for how to join() them against your input
| |
− | /*>>prefixes*/
| |
− | Modernizr._prefixes = prefixes;
| |
− | /*>>prefixes*/
| |
− | /*>>domprefixes*/
| |
− | Modernizr._domPrefixes = domPrefixes;
| |
− | Modernizr._cssomPrefixes = cssomPrefixes;
| |
− | /*>>domprefixes*/
| |
− |
| |
− | /*>>mq*/
| |
− | // Modernizr.mq tests a given media query, live against the current state of the window
| |
− | // A few important notes:
| |
− | // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
| |
− | // * A max-width or orientation query will be evaluated against the current state, which may change later.
| |
− | // * You must specify values. Eg. If you are testing support for the min-width media query use:
| |
− | // Modernizr.mq('(min-width:0)')
| |
− | // usage:
| |
− | // Modernizr.mq('only screen and (max-width:768)')
| |
− | Modernizr.mq = testMediaQuery;
| |
− | /*>>mq*/
| |
− |
| |
− | /*>>hasevent*/
| |
− | // Modernizr.hasEvent() detects support for a given event, with an optional element to test on
| |
− | // Modernizr.hasEvent('gesturestart', elem)
| |
− | Modernizr.hasEvent = isEventSupported;
| |
− | /*>>hasevent*/
| |
− |
| |
− | /*>>testprop*/
| |
− | // Modernizr.testProp() investigates whether a given style property is recognized
| |
− | // Note that the property names must be provided in the camelCase variant.
| |
− | // Modernizr.testProp('pointerEvents')
| |
− | Modernizr.testProp = function(prop){
| |
− | return testProps([prop]);
| |
− | };
| |
− | /*>>testprop*/
| |
− |
| |
− | /*>>testallprops*/
| |
− | // Modernizr.testAllProps() investigates whether a given style property,
| |
− | // or any of its vendor-prefixed variants, is recognized
| |
− | // Note that the property names must be provided in the camelCase variant.
| |
− | // Modernizr.testAllProps('boxSizing')
| |
− | Modernizr.testAllProps = testPropsAll;
| |
− | /*>>testallprops*/
| |
− |
| |
− |
| |
− | /*>>teststyles*/
| |
− | // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
| |
− | // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
| |
− | Modernizr.testStyles = injectElementWithStyles;
| |
− | /*>>teststyles*/
| |
− |
| |
− |
| |
− | /*>>prefixed*/
| |
− | // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
| |
− | // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
| |
− |
| |
− | // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
| |
− | // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
| |
− | //
| |
− | // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
| |
− |
| |
− | // If you're trying to ascertain which transition end event to bind to, you might do something like...
| |
− | //
| |
− | // var transEndEventNames = {
| |
− | // 'WebkitTransition' : 'webkitTransitionEnd',
| |
− | // 'MozTransition' : 'transitionend',
| |
− | // 'OTransition' : 'oTransitionEnd',
| |
− | // 'msTransition' : 'MSTransitionEnd',
| |
− | // 'transition' : 'transitionend'
| |
− | // },
| |
− | // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
| |
− |
| |
− | Modernizr.prefixed = function(prop, obj, elem){
| |
− | if(!obj) {
| |
− | return testPropsAll(prop, 'pfx');
| |
− | } else {
| |
− | // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
| |
− | return testPropsAll(prop, obj, elem);
| |
− | }
| |
− | };
| |
− | /*>>prefixed*/
| |
− |
| |
− |
| |
− | /*>>cssclasses*/
| |
− | // Remove "no-js" class from <html> element, if it exists:
| |
− | docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
| |
− |
| |
− | // Add the new classes to the <html> element.
| |
− | (enableClasses ? ' js ' + classes.join(' ') : '');
| |
− | /*>>cssclasses*/
| |
− |
| |
− | return Modernizr;
| |
− |
| |
− | })(this, this.document);
| |
− |
| |
− | $(document).ready(function() {
| |
− | var labelWidth = $('.nav').width() / $('.nav_label').length;
| |
− | // var temp = labelWidth / labelNum;
| |
− | // alert("NAV_Width "+labelWidth + " Label_width "+ temp);
| |
− | var imgWidth = $('.navImg').height();
| |
− | $('.navImg').css('width', imgWidth+'px');
| |
− |
| |
− | var labelHeight = $('.nav').height();
| |
− | $.each($('.nav_label'), function() {
| |
− | $(this).css('width', labelWidth+'px');
| |
− | $(this).hover(function() {
| |
− | $(this).children('.links').css('display', 'block');
| |
− | var temp = $(this).children('.navImg').attr('imgHover');
| |
− | $(this).children('.navImg').css('background-image', temp);
| |
− | });
| |
− | $(this).mouseleave(function() {
| |
− | $(this).children('.links').css('display', 'none');
| |
− | var temp = $(this).children('.navImg').attr('img');
| |
− | $(this).children('.navImg').css('background-image', temp);
| |
− | });
| |
− | });
| |
− |
| |
− | $.each($('.links li'), function() {
| |
− | $(this).css('height', labelHeight/2+'px');
| |
− | });
| |
− | });
| |
− |
| |
− |
| |
− | /* ========================================================================= *\
| |
− | vmcarousel plugin by Vedmant
| |
− | \* ========================================================================= */
| |
− |
| |
− | (function ($, window, document, undefined) {
| |
− | "use strict";
| |
− |
| |
− | var pluginName = 'vmcarousel';
| |
− |
| |
− | /**
| |
− | * Defaults
| |
− | *
| |
− | * @type {}
| |
− | */
| |
− | var defaults = {
| |
− | delay: 4000,
| |
− | speed: 500,
| |
− | autoplay: true,
| |
− | items_to_show: 0, // 0 for auto calc
| |
− | min_items_to_show: 2,
| |
− | items_to_slide: 1,
| |
− | dont_cut: true,
| |
− | centered: false,
| |
− | start_item: 0,
| |
− | start_item_centered: false,
| |
− | infinite: false,
| |
− | changed_slide: $.noop()
| |
− | };
| |
− |
| |
− | /**
| |
− | * Plugin constructor
| |
− | *
| |
− | * @param element
| |
− | * @param options
| |
− | * @constructor
| |
− | */
| |
− | function Plugin(element, options)
| |
− | {
| |
− | this._name = pluginName;
| |
− | this.element = element;
| |
− | this.$element = $(element);
| |
− | var data_options = parse_data_options(this.$element.data('options'));
| |
− | this.options = $.extend({}, defaults, options);
| |
− | this.options = $.extend({}, this.options, data_options);
| |
− | this.init();
| |
− | }
| |
− |
| |
− | /**
| |
− | * Parse data-options attribute options
| |
− | *
| |
− | * @param data_options_raw
| |
− | * @returns {Array}
| |
− | */
| |
− | function parse_data_options(data_options_raw)
| |
− | {
| |
− | if(data_options_raw === undefined) return [];
| |
− | var options = [];
| |
− | data_options_raw.split(';').forEach(function(el){
| |
− | var pair = el.split(':');
| |
− | if(pair.length == 2) options[pair[0].trim()] = pair[1].trim();
| |
− | });
| |
− | return options;
| |
− | }
| |
− |
| |
− |
| |
− | /**
| |
− | * Plugin functions
| |
− | */
| |
− | Plugin.prototype = {
| |
− |
| |
− | /**
| |
− | * Plugin init
| |
− | */
| |
− | init: function ()
| |
− | {
| |
− | var that = this;
| |
− |
| |
− | // Add class
| |
− | this.$element.addClass('vmcarousel');
| |
− |
| |
− | // Wrap
| |
− | this.$viewport = this.$element.wrap('<div class="vmc-viewport"></div>').parent();
| |
− | this.$container = this.$viewport.wrap('<div class="vmc-container"></div>').parent();
| |
− |
| |
− | // Some initial procedures with slides
| |
− | this.init_slides();
| |
− |
| |
− | // Items vars
| |
− | this.$orig_items = this.$element.find('>li');
| |
− | this.$items = this.$orig_items;
| |
− | this.orig_items_count = this.$orig_items.length;
| |
− | this.items_count = this.$items.length;
| |
− | this.orig_item_width = this.$items.outerWidth(true);
| |
− | this.item_width = this.orig_item_width;
| |
− |
| |
− | // Other vars
| |
− | this.current_position = 0;
| |
− |
| |
− | // Init functions
| |
− | this.calc_variables();
| |
− | this.init_infinite(this.options.start_item);
| |
− | this.init_controls();
| |
− | this.update_state();
| |
− |
| |
− | // Reorder slides to make start item at the center
| |
− | if(this.options.start_item_centered)
| |
− | this.reorder_to_center(this.options.start_item);
| |
− |
| |
− | // Initial set slide
| |
− | if( ! this.options.infinite)
| |
− | this.set_slide(this.options.start_item);
| |
− | else
| |
− | this.set_active_infinite(this.options.start_item);
| |
− |
| |
− | // Start timer
| |
− | if (this.options.autoplay) this.start_timer();
| |
− |
| |
− | // Window resize event
| |
− | $(window).resize(function () { that.resize() });
| |
− | },
| |
− |
| |
− | /**
| |
− | * Calculate all needed variables
| |
− | */
| |
− | calc_variables: function()
| |
− | {
| |
− | this.viewport_width = this.$viewport.width();
| |
− |
| |
− | // Calc items to show
| |
− | this.items_to_show = this.options.items_to_show;
| |
− | if( ! this.options.items_to_show || (this.orig_item_width * this.items_to_show) > this.viewport_width) {
| |
− | this.items_to_show = Math.floor(this.viewport_width / this.orig_item_width);
| |
− | }
| |
− |
| |
− | // Set odd number for centered type for not to cut items
| |
− | if(this.options.centered && this.options.dont_cut) {
| |
− | this.items_to_show = this.items_to_show % 2 ? this.items_to_show : this.items_to_show - 1;
| |
− | }
| |
− |
| |
− | // Min items to show
| |
− | if(this.items_to_show < this.options.min_items_to_show) this.items_to_show = this.options.min_items_to_show;
| |
− |
| |
− | // Calc item width for centered or dont_cut
| |
− | if(this.options.centered || this.options.dont_cut) {
| |
− | this.item_width = Math.floor(this.viewport_width / this.items_to_show);
| |
− | if(this.item_width < this.orig_item_width) this.item_width = this.orig_item_width;
| |
− | this.$items.width(this.item_width);
| |
− | this.full_items_width = this.item_width * this.items_count;
| |
− | this.$element.css({width: this.full_items_width + 'px'});
| |
− | }
| |
− |
| |
− | // Calc items to slide
| |
− | this.items_to_slide = this.options.items_to_slide;
| |
− | if( ! this.options.items_to_slide)
| |
− | this.items_to_slide = Math.floor(this.viewport_width / this.item_width);
| |
− | if(this.items_to_slide > this.items_to_show) this.items_to_slide = this.items_to_show;
| |
− |
| |
− | if(this.items_to_slide <= 0) this.items_to_slide = 1;
| |
− |
| |
− | this.hide_controls = this.items_count <= this.items_to_show;
| |
− |
| |
− | this.infinite_initial_margin = - this.item_width;
| |
− | if(this.items_to_show % 2 == 0) this.infinite_initial_margin += this.item_width / 2;
| |
− |
| |
− | },
| |
− |
| |
− | /**
| |
− | * Update carousel state (clases, so on)
| |
− | */
| |
− | update_state: function()
| |
− | {
| |
− | this.$element.css({transition: 'transform ' + this.options.speed / 1000 + 's'});
| |
− |
| |
− | if(this.hide_controls) this.$container.addClass('hide-controls');
| |
− | else this.$container.removeClass('hide-controls');
| |
− | },
| |
− |
| |
− | /**
| |
− | * Set slides properties
| |
− | */
| |
− | init_slides: function()
| |
− | {
| |
− | this.$element.find('>li').each(function(i){
| |
− | $(this).attr('data-slide', i);
| |
− | });
| |
− | },
| |
− |
| |
− | /**
| |
− | * Init controls
| |
− | */
| |
− | init_controls: function()
| |
− | {
| |
− | var that = this;
| |
− |
| |
− | // Controls
| |
− | this.$btn_left = this.$container.append('<a href="" class="vmc-arrow-left"></a>').find('.vmc-arrow-left');
| |
− | this.$btn_right = this.$container.append('<a href="" class="vmc-arrow-right"></a>').find('.vmc-arrow-right');
| |
− |
| |
− | // Bind controls
| |
− | this.$btn_left.click(function (e) {
| |
− | e.preventDefault();
| |
− | that.slide_relative(-1);
| |
− | });
| |
− | this.$btn_right.click(function (e) {
| |
− | e.preventDefault();
| |
− | that.slide_relative(1);
| |
− | });
| |
− | },
| |
− |
| |
− | /**
| |
− | * Reorder slider to place item at the center
| |
− | *
| |
− | * @param position
| |
− | */
| |
− | reorder_to_center: function(position)
| |
− | {
| |
− | // Dont reorder if 2 or less items
| |
− | if(this.orig_items_count < 3) return;
| |
− |
| |
− | // Calc shift times and direction
| |
− | var shift_count = Math.floor(this.orig_items_count / 2) - position;
| |
− | var dir = shift_count > 0 ? -1 : 1;
| |
− |
| |
− | // Shift items
| |
− | shift_count = Math.abs(shift_count);
| |
− | for(var i = 0; i < shift_count; i++) this.switch_slides(dir);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Move to exact slide
| |
− | *
| |
− | * @param slide
| |
− | */
| |
− | set_slide: function(slide)
| |
− | {
| |
− | var position = this.$element.find('>[data-slide="'+slide+'"]').index();
| |
− |
| |
− | this.slide_relative(position);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Slide n items forth or back
| |
− | *
| |
− | * @param offset
| |
− | */
| |
− | slide_relative: function (offset)
| |
− | {
| |
− | if(this.options.centered && this.options.infinite)
| |
− | this.slide_relative_centered_infinite(offset);
| |
− | else if(this.options.centered)
| |
− | this.slide_relative_centered(offset);
| |
− | else
| |
− | this.slide_relative_left(offset);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Slide n items forth or back for left mode
| |
− | *
| |
− | * @param offset
| |
− | */
| |
− | slide_relative_left: function (offset)
| |
− | {
| |
− | var new_position = this.current_position + (offset * this.items_to_slide);
| |
− |
| |
− | // If now is ribbon tail on go back reverse to slide_count step
| |
− | if (this.current_position == this.items_count && offset < 0) {
| |
− | new_position = (Math.floor(this.items_count / this.items_to_slide) + offset) * this.items_to_slide;
| |
− |
| |
− | // Show ribbon tail (last slide to right border)
| |
− | } else if (new_position < 0 || (this.items_to_slide > (this.items_count - new_position) && new_position < this.items_count)) {
| |
− | new_position = this.items_count - this.items_to_show;
| |
− |
| |
− | // Scroll to beggining
| |
− | } else if (new_position > (this.items_count - this.items_to_show)) {
| |
− | new_position = 0;
| |
− | }
| |
− |
| |
− | var margin_left = - this.item_width * new_position;
| |
− |
| |
− | // Animate slide
| |
− | this.animate_slide(margin_left);
| |
− |
| |
− | this.change_slide(new_position, new_position);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Slide n items forth or back for centered mode
| |
− | *
| |
− | * @param offset
| |
− | */
| |
− | slide_relative_centered: function (offset)
| |
− | {
| |
− | var new_position = this.current_position + (offset * this.items_to_slide);
| |
− |
| |
− | if (new_position < 0) {
| |
− | new_position = this.items_count - 1;
| |
− |
| |
− | // Scroll to beggining
| |
− | } else if (new_position >= this.items_count) {
| |
− | new_position = 0;
| |
− | }
| |
− |
| |
− | var margin_left = this.viewport_width / 2 - (this.item_width * (new_position + 1) - this.item_width / 2);
| |
− |
| |
− | // Animate slide
| |
− | this.animate_slide(margin_left);
| |
− |
| |
− | var new_active_slide = this.$items.eq(new_position).attr('data-slide');
| |
− |
| |
− | this.change_slide(new_position, new_active_slide);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Init infinite carousel feature
| |
− | */
| |
− | init_infinite: function (start_item)
| |
− | {
| |
− | if( ! this.options.infinite) return;
| |
− |
| |
− | this.make_clones();
| |
− |
| |
− | this.calc_variables();
| |
− |
| |
− | this.$element.css("margin-left", this.infinite_initial_margin + "px");
| |
− |
| |
− | },
| |
− |
| |
− | /**
| |
− | * Make clones for infinite carousel
| |
− | */
| |
− | make_clones: function ()
| |
− | {
| |
− | var times = 1;
| |
− | if(this.items_count < this.items_to_show)
| |
− | times = Math.ceil(this.items_to_show / this.items_count);
| |
− |
| |
− | for(var i = 0; i < times; i++) {
| |
− | this.$element.prepend(this.$orig_items.clone().addClass('vmc-clone'));
| |
− | }
| |
− |
| |
− | this.$items = this.$element.find('>li');
| |
− | this.items_count = this.$items.length;
| |
− | },
| |
− |
| |
− | /**
| |
− | * Slide n items forth or back for centered mode with infinite mode
| |
− | *
| |
− | * @param offset
| |
− | */
| |
− | slide_relative_centered_infinite: function (offset)
| |
− | {
| |
− | var that = this;
| |
− |
| |
− | // Only one item to slide
| |
− | offset = offset < 0 ? -1 : 1;
| |
− |
| |
− | var margin_left = this.infinite_initial_margin - this.item_width * offset;
| |
− |
| |
− | //if(this.items_to_show % 2 == 0) margin_left += this.item_width / 2;
| |
− |
| |
− | var new_position = Math.ceil(this.items_to_show / 2) + offset;
| |
− |
| |
− | var new_active_slide = this.$items.eq(new_position).attr('data-slide');
| |
− |
| |
− | this.animate_slide(margin_left, function(e){
| |
− |
| |
− | that.switch_slides(offset);
| |
− |
| |
− | that.$element.css("margin-left", that.infinite_initial_margin + "px");
| |
− |
| |
− | }, 'margin');
| |
− |
| |
− | this.change_slide(new_position, new_active_slide);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Place first slide at the end or last slide before first
| |
− | *
| |
− | * @param dir
| |
− | */
| |
− | switch_slides: function(dir)
| |
− | {
| |
− | var that = this;
| |
− |
| |
− | // Switch last or first item
| |
− | if(dir > 0) {
| |
− | that.$items.last().after(that.$items.first());
| |
− | } else {
| |
− | that.$items.first().before(that.$items.last());
| |
− | }
| |
− |
| |
− | // Reload elements
| |
− | that.$items = that.$element.find('>li');
| |
− | },
| |
− |
| |
− | /**
| |
− | * Set first active slide for infinite carousel
| |
− | *
| |
− | */
| |
− | set_active_infinite: function(position)
| |
− | {
| |
− | var center_position = Math.ceil(this.items_to_show / 2);
| |
− |
| |
− | for(var i = 0; i < this.orig_items_count; i++) {
| |
− | this.switch_slides(1);
| |
− | if(this.$items.eq(center_position).attr('data-slide') == position) {
| |
− | this.$items.eq(center_position).addClass('vmc_active');
| |
− | return true;
| |
− | }
| |
− | }
| |
− |
| |
− | return false;
| |
− | },
| |
− |
| |
− | /**
| |
− | * Change slide
| |
− | *
| |
− | * @param new_position
| |
− | * @param margin_left
| |
− | */
| |
− | change_slide: function (new_position, new_active_slide)
| |
− | {
| |
− | var that = this;
| |
− |
| |
− | // Update current position
| |
− | this.current_position = new_position;
| |
− | // Add active class
| |
− | this.$items.removeClass('vmc_active').eq(this.current_position).addClass('vmc_active');
| |
− | // Restart timer
| |
− | if (this.options.autoplay) this.start_timer();
| |
− | // Call callback
| |
− | if (typeof this.options.changed_slide === "function") {
| |
− | this.options.changed_slide.call(this, new_active_slide);
| |
− | }
| |
− | },
| |
− |
| |
− | /**
| |
− | * Slide animation
| |
− | *
| |
− | * @param margin_left
| |
− | */
| |
− | animate_slide: function (margin_left, complete, type)
| |
− | {
| |
− | var that = this;
| |
− |
| |
− | if(type == undefined) type = 'css3';
| |
− | if(complete == undefined) complete = $.noop();
| |
− |
| |
− | if (Modernizr.csstransitions && type == 'css3') {
| |
− | this.$element.css("transform", "translate3d(" + margin_left + "px,0px,0px)");
| |
− | this.$element.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', complete);
| |
− | } else {
| |
− | this.$element.stop(true).animate({'margin-left': margin_left + 'px'}, this.options.speed, 'swing', complete);
| |
− | }
| |
− | },
| |
− |
| |
− | /**
| |
− | * Resize event
| |
− | */
| |
− | resize: function ()
| |
− | {
| |
− | this.calc_variables();
| |
− |
| |
− | this.update_state();
| |
− |
| |
− | // Update slider position
| |
− | this.slide_relative(0);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Start timer
| |
− | */
| |
− | start_timer: function ()
| |
− | {
| |
− | var that = this;
| |
− | if (this.timer_id != 0) clearTimeout(this.timer_id);
| |
− | this.timer_id = setTimeout(function () {
| |
− | that.slide_relative(1);
| |
− | }, this.options.delay);
| |
− | },
| |
− |
| |
− | /**
| |
− | * Stop timer
| |
− | */
| |
− | stop_timer: function ()
| |
− | {
| |
− | clearTimeout(this.timer_id);
| |
− | this.timer_id = 0;
| |
− | }
| |
− |
| |
− | } // Plugin.prototype
| |
− |
| |
− | /**
| |
− | * Attach to Jquery
| |
− | *
| |
− | * @param options
| |
− | * @returns {*}
| |
− | */
| |
− | $.fn[pluginName] = function (options) {
| |
− | var args = [].slice.call(arguments, 1);
| |
− | return this.each(function () {
| |
− | if (!$.data(this, 'plugin_' + pluginName))
| |
− | $.data(this, 'plugin_' + pluginName, new Plugin(this, options));
| |
− | else if ($.isFunction(Plugin.prototype[options]))
| |
− | $.data(this, 'plugin_' + pluginName)[options].apply($.data(this, 'plugin_' + pluginName), args);
| |
− | });
| |
− | }
| |
− |
| |
− | // Auto init for tags with data-vmcarousel attribute
| |
− | $('[data-vmcarousel]').vmcarousel();
| |
− |
| |
− | })(jQuery, window, document);
| |
− |
| |
− |
| |
− | </script>
| |
− | <script type="text/javascript" src="js/bootstrap.min.js" ></script>
| |
− | <script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
| |
− | <script src="js/bootstrap.min.js"></script>
| |
− | <script src="dist/jquery.vm-carousel.js"></script>
| |
− | <script type="text/javascript">
| |
− | jQuery(function($){
| |
− | $('.vmcarousel-centered').vmcarousel({
| |
− | centered: true,
| |
− | start_item: 2,
| |
− | autoplay: false,
| |
− | infinite: false
| |
− | });
| |
− |
| |
− | $('.vmcarousel-centered-infitine').vmcarousel({
| |
− | centered: true,
| |
− | start_item: 1,
| |
− | autoplay: false,
| |
− | infinite: true
| |
− | });
| |
− |
| |
− | $('.vmcarousel-normal').vmcarousel({
| |
− | centered: false,
| |
− | start_item: 0,
| |
− | autoplay: false,
| |
− | infinite: false
| |
− | });
| |
− | });
| |
− | </script>
| |
− |
| |
− |
| |
− | </body>
| |
| </html> | | </html> |