Team:Cambridge/static/wiki.js

From 2011.igem.org

Revision as of 03:20, 22 September 2011 by Hjking734 (Talk | contribs)

/*

This file is part of the cambridge 2011 igem teams wiki. nothing is guaranteed.
DO WHAT THE F*CK YOU WANT TO PUBLIC LICENSE
                   Version 2, December 2004
Copyright (C) 2011 Haydn King hjking734@gmail.com
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
           DO WHAT THE F*CK YOU WANT TO PUBLIC LICENSE
  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 0. You just DO WHAT THE F*CK YOU WANT TO. 
  • /

//current area/subarea var area = 'overview'; var subarea = 'home'; //the url that's loaded var the_url = window.location.pathname;//the url that's being displayed //the interval var int;

var set_hash = function(path) {//set the hash to the path given

 int = window.clearInterval(int);
 
 //turn the path into a presentable hash
 var hash = path.replace(/http:\/\/2011.igem.org/i, ).replace(/\/Team:Cambridge/i, );
 
 window.location.hash = hash;
 the_url = get_hash(false);
 
 int = setInterval('check_hash();', 500);

}

var get_hash = function(absolute) {

 var hash = window.location.hash.substr(1);
 if(!absolute || (absolute == undefined))
   return "/Team:Cambridge" + hash;
 return "https://2011.igem.org/Team:Cambridge" + hash;

}

var check_hash = function() {//check if the hash has changed (e.g. back button press)

 if(the_url != get_hash(false))
 {
   int = clearInterval(int);//pause
   if((window.location.hash.charAt(1) == '/') || (window.location.hash == ))
     load_url(get_hash(false));
   int = setInterval('check_hash();', 500);
 }

}

//update the edit, login and logout links after page change var update_links = function(current_url) {

 $('#edit-link').attr('href', current_url + '?action=edit');
 $('#edit-intro-link').attr('href', '/Team:Cambridge/desc/' + area + '/' + subarea + '?action=edit');
 $('#login-link' ).attr('href', '/wiki/index.php?title=Special:UserLogin&returnto=' + current_url);
 $('#logout-link').attr('href', '/wiki/index.php?title=Special:UserLogout&returnto=' + current_url);

}

var is_internal = function(obj) {

 if($(obj).hasClass('cam-external')) return false;
 return /\/Team:Cambridge/i.test($(obj).attr("href"));

} var is_external = function(obj) { return !is_internal(obj);}

var areas = [

 [/\/Team:Cambridge\/project/i, 'project',],
 [/\/Team:Cambridge\/(experiments|constructs|protocols|safety|labwork)/i, 'labwork',],
 [/\/Team:Cambridge\/society/i, 'society',],
 [/\/Team:Cambridge\/team/i, 'team',],
 [/\/Team:Cambridge/i, 'overview'],
 [/./i, 'overview'],

];

var subareas = {

 'overview': [
   [/\/Team:Cambridge\/Media/i, 'media'],
   [/\/Team:Cambridge\/Parts/i, 'parts'],
   [/\/Team:Cambridge\/Blog/i, 'blog'],
   [/./i, 'home'],

],

 'project':  [
   [/\/Team:Cambridge\/Project\/Background/i, 'background'],
   [/\/Team:Cambridge\/Project\/Microscopy/i, 'microscopy'],
   [/\/Team:Cambridge\/Project\/in_vitro/i, 'invitro'],
   [/\/Team:Cambridge\/Project\/in_vivo/i, 'invivo'],
   [/\/Team:Cambridge\/Project\/gibthon/i, 'gibthon'],
   [/\/Team:Cambridge\/Project\/future/i, 'future'],
   [/\/Team:Cambridge\/Project/i, 'overview'],

],

 'labwork':  [
   [/\/Team:Cambridge\/Experiments\/Plasmid_Constructs/i, 'constructs'],
   [/\/Team:Cambridge\/experiments/i, 'experiments'],
   [/\/Team:Cambridge\/protocols/i, 'protocols'],
   [/\/Team:Cambridge\/safety/i, 'safety'],
   [/\/Team:Cambridge\/labwork/i, 'overview'],

],

 'society':  [
   [/\/Team:Cambridge\/Society\/report/i, 'report'],
   [/\/Team:Cambridge\/Society\/interviews/i, 'interviews'],
   [/\/Team:Cambridge\/Society/i, 'overview'],

],

 'team':     [
   [/\/Team:Cambridge\/Team\/Students/i, 'students'],
   [/\/Team:Cambridge\/Team\/Academics/i, 'academics'],
   [/\/Team:Cambridge\/Team\/Sponsors/i, 'sponsors'],
   [/\/Team:Cambridge\/Team/i, 'overview'],

], };

var get_main_area = function(path) {

 for ( var a in areas)

{ if(areas[a][0].test(path)) { return areas[a][1]; } }

 return 'default';

}

var get_sub_area = function(path, area) {

 if(area == 'default') return 'default';
 for ( var a in subareas[area])

{ if(subareas[area][a][0].test(path)) { return subareas[area][a][1]; } }

 return 'overview';

}

var get_area = function(path) { //figure out which area of the site we are in

 if(path == undefined)

var path = location.pathname; var ar = get_main_area(path); var sub = get_sub_area(path, ar); return [ar, sub]; }

var apply_area = function() { $('.cam-selected').removeClass('cam-selected'); $('.cam-menu-item.cam-' + area).addClass('cam-selected'); $('.cam-' + area + '-' + subarea).addClass('cam-selected'); }

var set_area = function(path) { var as = get_area(path); area = as[0]; subarea = as[1]; apply_area(); }

var colorize_links = function($container) //colourise all the links in the container based on where the go {

 $container.find('a').each( function(i) {
   var $this = $(this);
   if($this.hasClass('cam-color-exempt'))
     return;
   var ar = ;
   if(is_external($this))
     ar = 'ext';
   else 
     ar = get_main_area($this.attr('href'));
   
   $(this).addClass('cam-' + ar);
 });

}

var loading_timeout;

var show_loading = function() {

 //only show the loading bar if it's taking more than 500ms to display
 loading_timeout = setTimeout("$('#cam_loading').slideDown('fast');", 500);

}

var hide_loading = function() {

 clearTimeout(loading_timeout);
 $('#cam_loading').slideUp('fast');

}

var load_url = function(url) {

 if(url == undefined)
   url = '/Team:Cambridge';
 var after_hash = ;
 var match = url.match(/#.+/i);
 if(match != null)
   after_hash = match[0].substr(1);
 var hash_start = url.search('#');
 if(hash_start > 0)
 {
   url = url.substr(0, hash_start);
 }
 var load = url + '?action=render';
 show_loading();
 $.ajax({
   'url': load,
   'dataType': 'html',
   'error': function(jqXHR, textStatus, errorThrown) {
     hide_loading();
     set_hash(url);
var $c = $('

AjaxError

Got error "' + errorThrown + '" while attempting to load url "' + load + '"

');
     $('#cam_pagecontent').hide().html($c).show();	
     window.scrollTo(0,0);	
   },
   'success': function(data){
     var $c = $('#wiki_content', data);
     $('#cam_pagecontent').hide().html($c.html()).show();	
     colorize_links($('#cam_pagecontent'));
     window.scrollTo(0,0);
     hide_loading();
     if(after_hash != )
       window.location.hash = after_hash;
     set_hash(url);
     
     //load the parts if we're on the parts page. This is hacky but I don't give a fark
     if((area == 'overview') && (subarea == 'parts'))
     {
       $('#groupparts').load('/cgi/api/groupparts.cgi?t=iGEM011\&g=Cambridge',function(){ $('#groupparts .tablesorter').tablesorter();} );
     }
   },
 });
 set_area(url);
 $('#cam_desc').introduction('setArea', area, subarea);
 update_links(url);

};

var wiki_main = function() {

 $('.cam-menu-item a').mouseenter( function(event) {//in

$(event.currentTarget).next().children('.cam-menu-drop').slideDown('fast');

 });
 $('.cam-menu-item').mouseleave( function(event) {//out
   $(event.currentTarget).find('.cam-menu-drop').slideUp('fast');
 }).click( function(event) {//hide on click
   $(event.currentTarget).find('.cam-menu-drop').slideUp('fast');
 });
 $('.cam-social-link').hover(
   function(event) {
     $(this).children().animate({top:0}, 75);
   },
   function(event) {
     $(this).children().animate({'top':12}, 250);
   }		
 ).click( function() {
   window.location = $(this).attr('href');
 });
 $('a').live('click', function(event) {
   if(event.ctrlKey) return true;
   if(is_internal(this))
   {
     event.preventDefault();
     load_url($(this).attr('href'));
     return false;
   }
   return true;
 });

$('#cam_topbar a').hover( function() { $(this).prev('.cam-ui-icon').addClass('cam-hover'); }, function() { $(this).prev('.cam-ui-icon').removeClass('cam-hover'); } );

 int = window.setInterval('check_hash();', 500);
 if((window.location.hash == ) || (window.location.hash == undefined) || !(window.location.hash.charAt(1) == '/'))
 {
   set_area(the_url);
   set_hash(the_url);
   update_links(the_url);
   colorize_links($('#wiki_content'));
   $('#cam_desc').introduction('setArea', area, subarea);
 }
 else
 {
   load_url(get_hash());
 }

}