Team:HSAAHNU Anhui/inject.js

From 2014hs.igem.org

(Difference between revisions)
(start to try pjax)
(remove listener for out-this-site anchor)
Line 13: Line 13:
   function removeStyleNodes () {
   function removeStyleNodes () {
     var styleNodes = document.head.getElementsByTagName('style');
     var styleNodes = document.head.getElementsByTagName('style');
-
     while (styleNodes.length != 0) {
+
     while (styleNodes.length !== 0) {
       document.head.removeChild(styleNodes[0]);
       document.head.removeChild(styleNodes[0]);
     }
     }
Line 22: Line 22:
     var nonStylesheetLinksCounter = 0;
     var nonStylesheetLinksCounter = 0;
     var iter = 0;
     var iter = 0;
-
     while (linkNodes.length != nonStylesheetLinksCounter) {
+
     while (linkNodes.length !== nonStylesheetLinksCounter) {
       var node = linkNodes[iter];
       var node = linkNodes[iter];
-
       if (node['rel'] == 'stylesheet')
+
       if (node['rel'] === 'stylesheet')
         document.head.removeChild(node);
         document.head.removeChild(node);
       else {
       else {
Line 89: Line 89:
function cleanUpScriptTags () {
function cleanUpScriptTags () {
   var scriptNodes = document.head.getElementsByTagName('script');
   var scriptNodes = document.head.getElementsByTagName('script');
-
   while (scriptNodes.length != 0) {
+
   while (scriptNodes.length !== 0) {
     document.head.removeChild(scriptNodes[0]);
     document.head.removeChild(scriptNodes[0]);
   }
   }
Line 101: Line 101:
   $("a").click(function (event) {
   $("a").click(function (event) {
     var node = event.target;
     var node = event.target;
-
     var isInlineAnchor = node.href ? true
+
    if (node.href === null)
-
                                  : node.href[0] == '#';
+
      return true;
-
     if (isInlineAnchor)
+
 
 +
     var isInlineAnchor = node.href[0] === '#';
 +
    var isOutsiteAnchor = node.href[0] !== '/';
 +
     if (isInlineAnchor || isOutsiteAnchor)
       return true;
       return true;

Revision as of 02:07, 30 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 {
   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;
   if (node.href === null)
     return true;
   var isInlineAnchor = node.href[0] === '#';
   var isOutsiteAnchor = node.href[0] !== '/';
   if (isInlineAnchor || isOutsiteAnchor)
     return true;
   loadNewPage(node.href);
   return false;
 });

}

function resumeInitAfterJQueryUpdated () {

 cleanUpScriptTags();
 setupPJAXListener();

}