Team:HSAAHNU Anhui/inject.js

From 2014hs.igem.org

(Difference between revisions)
m (bug fixed)
(add watcher to see whether jquery has been updated)
Line 4: Line 4:
  * Apply common stylesheets.
  * Apply common stylesheets.
  * Update jQuery.
  * Update jQuery.
-
* Clean up script tags in head tag for debugging purpose.
 
  * move inner HTML of main tag to body tag for clarity.
  * 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.
  * Set up PJAX for better performance.
  * Use PJAX.complete to set up page specific things.
  * Use PJAX.complete to set up page specific things.
Line 61: Line 61:
   var main = document.body.getElementsByTagName('main')[0];
   var main = document.body.getElementsByTagName('main')[0];
   document.body.innerHTML = main.innerHTML;
   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
 +
    setTimeout(waitForJQueryToBeUpdated, 500);
}
}
Line 68: Line 82:
   updateJQuery();
   updateJQuery();
   relocateMainDocument();
   relocateMainDocument();
 +
  waitForJQueryToBeUpdated();
});
});

Revision as of 17:05, 29 May 2014

/*

* 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
   setTimeout(waitForJQueryToBeUpdated, 500);

}

$(document).ready(function () {

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

});