Team:TU Delft/files/main.js

From 2010.igem.org

(Difference between revisions)
Line 39: Line 39:
return kvmap;
return kvmap;
}
}
 +
function setHash(page, kvmap) {
function setHash(page, kvmap) {
Line 60: Line 61:
     js.onreadystatechange = function () {
     js.onreadystatechange = function () {
-
         if (js.readyState == 'complete') {
+
         if (js.readyState == 'complete')
cb();
cb();
-
        }
 
     }
     }
Line 73: Line 73:
}
}
-
function loadPage(page)
+
function moveToAnchor(anchor) {
 +
var pos = $('#load > a[name='+anchor+']').offset();
 +
dbgout('anchor: '+anchor+';  pos=' + pos.left + ','+pos.top );
 +
window.scroll(pos.left, pos.top);
 +
}
 +
 
 +
function loadPage(page, anchor)
{
{
currentPage = page;
currentPage = page;
Line 84: Line 90:
$(window).trigger('page_init');
$(window).trigger('page_init');
rewriteLinks($("#load"));
rewriteLinks($("#load"));
 +
if (anchor) moveToAnchor(anchor);
next();
next();
}
}
Line 104: Line 111:
if (changepage) {
if (changepage) {
-
loadPage(changepage);
+
loadPage(changepage, kvmap.anchor);
-
} else
+
} else {
 +
if(kvmap.anchor) moveToAnchor(kvmap.anchor);
$(window).trigger('hashupdate');
$(window).trigger('hashupdate');
 +
}
}
}
} else {
} else {
Line 119: Line 128:
var url = this.href;
var url = this.href;
-
if(this.hash)
+
if(this.hash) {
this.href = this.hash;
this.href = this.hash;
-
else if(txt != "edit")
+
this.href = '#page=' + currentPage + '&anchor=' + this.hash.substring(1);
 +
dbgout('rewrite: ' + this.href);
 +
} else if(txt != "edit")
this.href = this.href.replace("https://2010.igem.org/Team:TU_Delft/", "#page=");
this.href = this.href.replace("https://2010.igem.org/Team:TU_Delft/", "#page=");

Revision as of 11:52, 4 August 2010

//Global Vars var currentPage;


function dbgout(msg) {

 var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
 if(is_chrome) console.log(msg);

}

// Set document ready callback $(function() { // Initialize history plugin. $(window).hashchange(historyCallback); rewriteLinks($("#navlist"));

historyCallback();

// setup hovering $(".menu_button").hover( function () { $(this).addClass("hover"); }, function () { $(this).removeClass("hover"); } ); });


function isDefined(variable) {

   return typeof(window[variable]) != "undefined";

}

function splitHash(hash) { var kvpairs = hash.split('&'); var i; var kvmap = {}; for(i=0;i<kvpairs.length;i++) { var s = kvpairs[i].split('='); kvmap[s[0]] = s[1]; } return kvmap; }


function setHash(page, kvmap) { var str = '#page=' + page; var i; if (kvmap) { for(i in kvmap) { str += '&' + i + '=' + kvmap[i]; } } location.hash = str; }


function include_js(file, cb) {

   var html_doc = document.getElementsByTagName('head')[0];
   var js = document.createElement('script');
   js.setAttribute('type', 'text/javascript');
   js.setAttribute('src', file);
   html_doc.appendChild(js);
   js.onreadystatechange = function () {
       if (js.readyState == 'complete')

cb();

   }
   js.onload = cb;

}

function loadScript(src, callback) {

 include_js(src, callback);

}

function moveToAnchor(anchor) { var pos = $('#load > a[name='+anchor+']').offset(); dbgout('anchor: '+anchor+'; pos=' + pos.left + ','+pos.top ); window.scroll(pos.left, pos.top); }

function loadPage(page, anchor) { currentPage = page; var url = wgServer + "/Team:TU_Delft/" + page + "?action=render"; $(window).trigger('page_close'); $("#load").fadeOut(200);

var processPage = function(next) { dbgout('processPage: ' + page); $(window).trigger('page_init'); rewriteLinks($("#load")); if (anchor) moveToAnchor(anchor); next(); }

$.get(url, function(data) { $("#load").html(data).fadeIn(200).queue(processPage); }); }

function historyCallback() { var hash = location.hash; if(hash) { hash = hash.substring(1); if(hash.split('=').length > 1) { var kvmap = splitHash(hash); var changepage;

// looks a little clumsy, but js AND operator conflicts with mediawiki markup if (kvmap.page) if(kvmap.page != currentPage) changepage = kvmap.page;

if (changepage) { loadPage(changepage, kvmap.anchor); } else { if(kvmap.anchor) moveToAnchor(kvmap.anchor); $(window).trigger('hashupdate'); } } } else { setHash('pages/home'); } }


function rewriteLinks(elem) { $("a",elem).each(function() { var txt = $(this).text(); var url = this.href;

if(this.hash) { this.href = this.hash; this.href = '#page=' + currentPage + '&anchor=' + this.hash.substring(1); dbgout('rewrite: ' + this.href); } else if(txt != "edit") this.href = this.href.replace("https://2010.igem.org/Team:TU_Delft/", "#page=");

// dbgout('rewriting ' + url + ' to ' + this.href); }); }