Team:HSAAHNU Anhui/inject.js

From 2014hs.igem.org

Revision as of 02:02, 30 May 2014 by Selveskii (Talk | contribs)

/*

* Basically this script will do the following thing:
* Remove old styles.
* Apply common stylesheets.
* Update jQuery.
* move inner HTML of main tag to body tag for clarity.
* Clean up script tags in head tag for debugging purpose.
* Set up PJAX for better performance.
* Use PJAX.complete to set up page specific things.
*/

function removeOldStyles () {

 function removeStyleNodes () {
   var styleNodes = document.head.getElementsByTagName('style');
   while (styleNodes.length != 0) {
     document.head.removeChild(styleNodes[0]);
   }
 }
 function removelinkStylesheetNodes () {
   var linkNodes = document.head.getElementsByTagName('link');
   var nonStylesheetLinksCounter = 0;
   var iter = 0;
   while (linkNodes.length != nonStylesheetLinksCounter) {
     var node = linkNodes[iter];
     if (node['rel'] == 'stylesheet')
       document.head.removeChild(node);
     else {
       nonStylesheetLinksCounter ++;
       iter ++;
     }
   }
 }
 removeStyleNodes();
 removelinkStylesheetNodes();

}

function applyCommonStyles () {

 var stylesheetURLs = [
   'http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css',
   'http://ricostacruz.com/nprogress/nprogress.css',
   '/Team:HSAAHNU_Anhui/normalize.css?action=raw&ctype=text/css'
 ];
 stylesheetURLs.forEach(function (url) {
   var tag = document.createElement('link');
   tag.href = url;
   tag.rel = 'stylesheet';
   document.head.appendChild(tag);
 });

}

function updateJQuery () {

 var tag = document.createElement('script');
 tag.src = 'http://code.jquery.com/jquery-1.11.1.min.js';
 document.head.appendChild(tag);

}

function relocateMainDocument () {

 var main = document.body.getElementsByTagName('main')[0];
 document.body.innerHTML = main.innerHTML;

}

var JQueryLoadingTime = 0; function waitForJQueryToBeUpdated () {

 //16 seconds is long enough.
 var isLoadFailed = JQueryLoadingTime >= 32;
 if (isLoadFailed)
   alert('One component of this page failed to load. Please refresh!');
 var isJQueryUpdated = $.fn.jquery === '1.11.1';
 if (isJQueryUpdated)
   resumeInitAfterJQueryUpdated();
 else {
   JQueryLoadingTime ++;
   setTimeout(waitForJQueryToBeUpdated, 500);
 }

}

$(document).ready(function () {

 removeOldStyles();
 applyCommonStyles();
 updateJQuery();
 relocateMainDocument();
 waitForJQueryToBeUpdated();

});

function cleanUpScriptTags () {

 var scriptNodes = document.head.getElementsByTagName('script');
 while (scriptNodes.length != 0) {
   document.head.removeChild(scriptNodes[0]);
 }

}

function loadNewPage (href) {

 alert(href);

}

function setupPJAXListener () {

 $("a").click(function (event) {
   var node = event.target;
   var isInlineAnchor = node.href ? true
                                  : node.href[0] == '#';
   if (isInlineAnchor)
     return true;
   loadNewPage(node.href);
   return false;
 });

}

function resumeInitAfterJQueryUpdated () {

 cleanUpScriptTags();
 setupPJAXListener();

}