Team:UPO-Sevilla/Project/Basic Flip Flop/Data Page
From 2011.igem.org
(Difference between revisions)
Line 16: | Line 16: | ||
</ul> | </ul> | ||
- | <h1>Data Page</h1> | + | <h1>Data Page</h1> |
+ | |||
+ | <style type="text/css"> | ||
+ | .dataPage{width:700px; height:475px; background: url("https://static.igem.org/mediawiki/2011/a/a8/UPOSevillaBasicFlipFlopDataPage.png);} | ||
+ | .tour_Green{ | ||
+ | border: 3px solid transparent; | ||
+ | bottom: -2.5em; | ||
+ | display: inline-block; | ||
+ | height: 1em; | ||
+ | left: 15.5em; | ||
+ | position: relative; | ||
+ | width: 3.7em;} | ||
+ | .tour_LacI{ | ||
+ | border: 3px solid transparent; | ||
+ | bottom: -2.5em; | ||
+ | display: inline-block; | ||
+ | height: 1em; | ||
+ | left: 9em; | ||
+ | position: relative; | ||
+ | width: 2em;} | ||
+ | .tour_Plac{ | ||
+ | border: 3px solid transparent; | ||
+ | bottom: -2.5em; | ||
+ | display: inline-block; | ||
+ | height: 1em; | ||
+ | left: 1.5em; | ||
+ | position: relative; | ||
+ | width: 4em;} | ||
+ | .tour_cI{ border: 3px solid transparent; | ||
+ | bottom: -6em; | ||
+ | display: inline-block; | ||
+ | height: 1em; | ||
+ | left: 22em; | ||
+ | position: relative; | ||
+ | width: 6.5em;} | ||
+ | .tour_GFP{ | ||
+ | border: 3px solid transparent; | ||
+ | display: inline-block; | ||
+ | height: 1em; | ||
+ | position: relative; | ||
+ | right: 2.8em; | ||
+ | top: 21.5em; | ||
+ | width: 6.7em;} | ||
+ | .tour_Red{ border: 3px solid transparent; | ||
+ | display: inline-block; | ||
+ | height: 1em; | ||
+ | left: -6em; | ||
+ | position: relative; | ||
+ | top: 21.5em; | ||
+ | width: 4em;} | ||
+ | .tour_cI_ts{ | ||
+ | border: 3px solid transparent; | ||
+ | display: inline-block; | ||
+ | height: 1em; | ||
+ | left: -4.5em; | ||
+ | position: relative; | ||
+ | top: 21.8em; | ||
+ | width: 4.7em;} | ||
+ | .tour_LacI_2{ | ||
+ | border: 3px solid transparent; | ||
+ | display: inline-block; | ||
+ | height: 4em; | ||
+ | left: -14.5em; | ||
+ | position: relative; | ||
+ | top: 24.5em; | ||
+ | width: 6.7em;} | ||
+ | .tour_RFP{ | ||
+ | border: 3px solid transparent; | ||
+ | display: inline-block; | ||
+ | height: 4em; | ||
+ | left: 3.5em; | ||
+ | position: relative; | ||
+ | top: 7em; | ||
+ | width: 4.7em;} | ||
+ | </style> | ||
+ | <div class="wrapper"> | ||
+ | <div class="content"> | ||
+ | |||
+ | <div class="dataPage"> | ||
+ | <div class="tour_Green"></div> | ||
+ | |||
+ | <div class="tour_LacI"></div> | ||
+ | |||
+ | <div class="tour_Plac"></div> | ||
+ | |||
+ | <div class="tour_cI"></div> | ||
+ | |||
+ | <div class="tour_GFP"></div> | ||
+ | |||
+ | <div class="tour_Red"></div> | ||
+ | |||
+ | <div class="tour_cI_ts"></div> | ||
+ | |||
+ | <div class="tour_LacI_2"></div> | ||
+ | |||
+ | <div class="tour_RFP"></div> | ||
+ | |||
+ | |||
+ | </div> | ||
+ | </div> | ||
+ | |||
+ | </div> | ||
+ | |||
+ | <!-- The JavaScript --> | ||
+ | <script src="https://2011.igem.org/Team:UPO-Sevilla/js/jqueryeasing.js?action=raw&ctype=text/javascript" type="text/javascript"></script> | ||
+ | <script type="text/javascript"> | ||
+ | $(function() { | ||
+ | /* | ||
+ | the json config obj. | ||
+ | name: the class given to the element where you want the tooltip to appear | ||
+ | bgcolor: the background color of the tooltip | ||
+ | color: the color of the tooltip text | ||
+ | text: the text inside the tooltip | ||
+ | time: if automatic tour, then this is the time in ms for this step | ||
+ | position: the position of the tip. Possible values are | ||
+ | TL top left | ||
+ | TR top right | ||
+ | BL bottom left | ||
+ | BR bottom right | ||
+ | LT left top | ||
+ | LB left bottom | ||
+ | RT right top | ||
+ | RB right bottom | ||
+ | T top | ||
+ | R right | ||
+ | B bottom | ||
+ | L left | ||
+ | */ | ||
+ | var config = [ | ||
+ | { | ||
+ | "name" : "tour_Green", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "position" : "T", | ||
+ | "text" : "Green State: The adition of IPTG estimulates the production of GFP. But how?", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_LacI", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "LacI: This proteins binds to the Plac sequence, repressing the downstream genes.", | ||
+ | "position" : "T", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_Plac", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "Plac: The addition of IPTG separates LacI from the DNA, expressing the following genes:", | ||
+ | "position" : "T", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_cI", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "cI: represes LacI and RFP, because they are under control of promoter Prm", | ||
+ | "position" : "T", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_GFP", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "GFP: Our bacterium gets green!", | ||
+ | "position" : "B", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_Red", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "Red state: The opposing state works the other way round.", | ||
+ | "position" : "B", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_cI_ts", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "cI (ts): The heat shock stops this protein to work properly, allowing the pressence of:", | ||
+ | "position" : "B", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_LacI_2", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "LacI: forbids the transcripction of the genes responsibles of the green state", | ||
+ | "position" : "B", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | { | ||
+ | "name" : "tour_RFP", | ||
+ | "bgcolor" : "white", | ||
+ | "color" : "black", | ||
+ | "text" : "RFP: Switch to red achieved!", | ||
+ | "position" : "B", | ||
+ | "time" : 5000 | ||
+ | }, | ||
+ | |||
+ | ], | ||
+ | //define if steps should change automatically | ||
+ | autoplay = false, | ||
+ | //timeout for the step | ||
+ | showtime, | ||
+ | //current step of the tour | ||
+ | step = 0, | ||
+ | //total number of steps | ||
+ | total_steps = config.length; | ||
+ | |||
+ | //show the tour controls | ||
+ | showControls(); | ||
+ | |||
+ | /* | ||
+ | we can restart or stop the tour, | ||
+ | and also navigate through the steps | ||
+ | */ | ||
+ | $('#activatetour').live('click',startTour); | ||
+ | $('#canceltour').live('click',endTour); | ||
+ | $('#endtour').live('click',endTour); | ||
+ | $('#restarttour').live('click',restartTour); | ||
+ | $('#nextstep').live('click',nextStep); | ||
+ | $('#prevstep').live('click',prevStep); | ||
+ | |||
+ | function startTour(){ | ||
+ | $('#activatetour').remove(); | ||
+ | $('#endtour,#restarttour').show(); | ||
+ | if(!autoplay) | ||
+ | if(total_steps > 1) | ||
+ | $('#nextstep').show(); | ||
+ | showOverlay(); | ||
+ | nextStep(); | ||
+ | } | ||
+ | |||
+ | function nextStep(){ | ||
+ | if(!autoplay){ | ||
+ | if(step > 0) | ||
+ | $('#prevstep').show(); | ||
+ | else | ||
+ | $('#prevstep').hide(); | ||
+ | if(step == total_steps-1) | ||
+ | $('#nextstep').hide(); | ||
+ | else | ||
+ | $('#nextstep').show(); | ||
+ | } | ||
+ | if(step >= total_steps){ | ||
+ | //if last step then end tour | ||
+ | endTour(); | ||
+ | return false; | ||
+ | } | ||
+ | ++step; | ||
+ | showTooltip(); | ||
+ | } | ||
+ | |||
+ | function prevStep(){ | ||
+ | if(!autoplay){ | ||
+ | if(step > 2) | ||
+ | $('#prevstep').show(); | ||
+ | else | ||
+ | $('#prevstep').hide(); | ||
+ | if(step == total_steps) | ||
+ | $('#nextstep').show(); | ||
+ | } | ||
+ | if(step <= 1) | ||
+ | return false; | ||
+ | --step; | ||
+ | showTooltip(); | ||
+ | } | ||
+ | |||
+ | function endTour(){ | ||
+ | step = 0; | ||
+ | if(autoplay) clearTimeout(showtime); | ||
+ | removeTooltip(); | ||
+ | hideControls(); | ||
+ | hideOverlay(); | ||
+ | } | ||
+ | |||
+ | function restartTour(){ | ||
+ | step = 0; | ||
+ | if(autoplay) clearTimeout(showtime); | ||
+ | nextStep(); | ||
+ | } | ||
+ | |||
+ | function showTooltip(){ | ||
+ | //remove current tooltip | ||
+ | removeTooltip(); | ||
+ | |||
+ | var step_config = config[step-1]; | ||
+ | var $elem = $('.' + step_config.name); | ||
+ | |||
+ | if(autoplay) | ||
+ | showtime = setTimeout(nextStep,step_config.time); | ||
+ | |||
+ | var bgcolor = step_config.bgcolor; | ||
+ | var color = step_config.color; | ||
+ | |||
+ | var $tooltip = $('<div>',{ | ||
+ | id : 'tour_tooltip', | ||
+ | className : 'tooltip', | ||
+ | html : '<p>'+step_config.text+'</p><span class="tooltip_arrow"></span>' | ||
+ | }).css({ | ||
+ | 'display' : 'none', | ||
+ | 'background-color' : bgcolor, | ||
+ | 'color' : color | ||
+ | }); | ||
+ | |||
+ | //position the tooltip correctly: | ||
+ | |||
+ | //the css properties the tooltip should have | ||
+ | var properties = {}; | ||
+ | |||
+ | var tip_position = step_config.position; | ||
+ | |||
+ | //append the tooltip but hide it | ||
+ | $('BODY').prepend($tooltip); | ||
+ | |||
+ | //get some info of the element | ||
+ | var e_w = $elem.outerWidth(); | ||
+ | var e_h = $elem.outerHeight(); | ||
+ | var e_l = $elem.offset().left; | ||
+ | var e_t = $elem.offset().top; | ||
+ | |||
+ | |||
+ | switch(tip_position){ | ||
+ | case 'TL' : | ||
+ | properties = { | ||
+ | 'left' : e_l, | ||
+ | 'top' : e_t + e_h + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_TL'); | ||
+ | break; | ||
+ | case 'TR' : | ||
+ | properties = { | ||
+ | 'left' : e_l + e_w - $tooltip.width() + 'px', | ||
+ | 'top' : e_t + e_h + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_TR'); | ||
+ | break; | ||
+ | case 'BL' : | ||
+ | properties = { | ||
+ | 'left' : e_l + 'px', | ||
+ | 'top' : e_t - $tooltip.height() + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_BL'); | ||
+ | break; | ||
+ | case 'BR' : | ||
+ | properties = { | ||
+ | 'left' : e_l + e_w - $tooltip.width() + 'px', | ||
+ | 'top' : e_t - $tooltip.height() + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_BR'); | ||
+ | break; | ||
+ | case 'LT' : | ||
+ | properties = { | ||
+ | 'left' : e_l + e_w + 'px', | ||
+ | 'top' : e_t + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_LT'); | ||
+ | break; | ||
+ | case 'LB' : | ||
+ | properties = { | ||
+ | 'left' : e_l + e_w + 'px', | ||
+ | 'top' : e_t + e_h - $tooltip.height() + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_LB'); | ||
+ | break; | ||
+ | case 'RT' : | ||
+ | properties = { | ||
+ | 'left' : e_l - $tooltip.width() + 'px', | ||
+ | 'top' : e_t + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_RT'); | ||
+ | break; | ||
+ | case 'RB' : | ||
+ | properties = { | ||
+ | 'left' : e_l - $tooltip.width() + 'px', | ||
+ | 'top' : e_t + e_h - $tooltip.height() + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_RB'); | ||
+ | break; | ||
+ | case 'T' : | ||
+ | properties = { | ||
+ | 'left' : e_l + e_w/2 - $tooltip.width()/2 + 'px', | ||
+ | 'top' : e_t + e_h + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_T'); | ||
+ | break; | ||
+ | case 'R' : | ||
+ | properties = { | ||
+ | 'left' : e_l - $tooltip.width() + 'px', | ||
+ | 'top' : e_t + e_h/2 - $tooltip.height()/2 + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_R'); | ||
+ | break; | ||
+ | case 'B' : | ||
+ | properties = { | ||
+ | 'left' : e_l + e_w/2 - $tooltip.width()/2 + 'px', | ||
+ | 'top' : e_t - $tooltip.height() + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_B'); | ||
+ | break; | ||
+ | case 'L' : | ||
+ | properties = { | ||
+ | 'left' : e_l + e_w + 'px', | ||
+ | 'top' : e_t + e_h/2 - $tooltip.height()/2 + 'px' | ||
+ | }; | ||
+ | $tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_L'); | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | |||
+ | /* | ||
+ | if the element is not in the viewport | ||
+ | we scroll to it before displaying the tooltip | ||
+ | */ | ||
+ | var w_t = $(window).scrollTop(); | ||
+ | var w_b = $(window).scrollTop() + $(window).height(); | ||
+ | //get the boundaries of the element + tooltip | ||
+ | var b_t = parseFloat(properties.top,10); | ||
+ | |||
+ | if(e_t < b_t) | ||
+ | b_t = e_t; | ||
+ | |||
+ | var b_b = parseFloat(properties.top,10) + $tooltip.height(); | ||
+ | if((e_t + e_h) > b_b) | ||
+ | b_b = e_t + e_h; | ||
+ | |||
+ | |||
+ | if((b_t < w_t || b_t > w_b) || (b_b < w_t || b_b > w_b)){ | ||
+ | $('html, body').stop() | ||
+ | .animate({scrollTop: b_t}, 500, 'easeInOutExpo', function(){ | ||
+ | //need to reset the timeout because of the animation delay | ||
+ | if(autoplay){ | ||
+ | clearTimeout(showtime); | ||
+ | showtime = setTimeout(nextStep,step_config.time); | ||
+ | } | ||
+ | //show the new tooltip | ||
+ | $tooltip.css(properties).show(); | ||
+ | }); | ||
+ | } | ||
+ | else | ||
+ | //show the new tooltip | ||
+ | $tooltip.css(properties).show(); | ||
+ | } | ||
+ | |||
+ | function removeTooltip(){ | ||
+ | $('#tour_tooltip').remove(); | ||
+ | } | ||
+ | |||
+ | function showControls(){ | ||
+ | /* | ||
+ | we can restart or stop the tour, | ||
+ | and also navigate through the steps | ||
+ | */ | ||
+ | var $tourcontrols = '<div id="tourcontrols" class="tourcontrols">'; | ||
+ | $tourcontrols += '<p>Data Page. Step by Step</p>'; | ||
+ | $tourcontrols += '<span class="button" id="activatetour">Start the tour</span>'; | ||
+ | if(!autoplay){ | ||
+ | $tourcontrols += '<div class="nav"><span class="button" id="prevstep" style="display:none;">< Previous</span>'; | ||
+ | $tourcontrols += '<span class="button" id="nextstep" style="display:none;">Next ></span></div>'; | ||
+ | } | ||
+ | $tourcontrols += '<a id="restarttour" style="display:none;">Restart the tour</span>'; | ||
+ | $tourcontrols += '<a id="endtour" style="display:none;">End the tour</a>'; | ||
+ | $tourcontrols += '<span class="close" id="canceltour"></span>'; | ||
+ | $tourcontrols += '</div>'; | ||
+ | |||
+ | $('BODY').prepend($tourcontrols); | ||
+ | $('#tourcontrols').animate({'right':'30px'},500); | ||
+ | } | ||
+ | |||
+ | function hideControls(){ | ||
+ | $('#tourcontrols').remove(); | ||
+ | } | ||
+ | |||
+ | function showOverlay(){ | ||
+ | var $overlay = '<div id="tour_overlay" class="overlay"></div>'; | ||
+ | $('BODY').prepend($overlay); | ||
+ | } | ||
+ | |||
+ | function hideOverlay(){ | ||
+ | $('#tour_overlay').remove(); | ||
+ | } | ||
+ | |||
+ | }); | ||
+ | </script> | ||
+ | |||
+ | |||
+ | |||
- | |||
- | |||
- | |||
</div> | </div> |
Revision as of 17:34, 21 September 2011