HQ:Sitemap.js



//these script uses "0" to replace special characters for sorting and ordering pages //"Sitemap" is part of the ids to make sure it is appended on the page and not on the menu or anywhere else


$(document).ready(function() {

//check if the user is part of HQ check_user_priviliges();

// call the function to load the page list load_page_list("https://2021.igem.org/Special:AllPages");


//switching between views

$(".view_format_button").click(function() { $(".view_format_button").removeClass("selected_view"); $(".view_format_button_content").removeClass("selected_content");

$(this).addClass("selected_view"); $("#"+this.id+"_content").addClass("selected_content"); });


});



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FUNCTIONS

function check_user_priviliges (){

switch ( wgUserName) {

case "Sifuentes anita": case "Vinoo": case "THaddock": case "Meagan": case "Abigail": case "MariaB": $(".HQ_info").show(); break;

default: $(".HQ_info").hide(); break; } }


/////////////////////////////////////////////////////////////////////////////////


	function load_page_list ( page_url ) {

$.get(page_url).then(function(page_html) { var $link_page = $(page_html);

$link_page.find('.mw-allpages-chunk li').each(function () { sort_pages( $(this).text(), $(this).html() ); });


var next_page_url = $link_page.find('.mw-allpages-nav a:contains("Next page")').attr('href');

//if there is another page with more links, run this function again if (next_page_url) { load_page_list(next_page_url); }

//content is done loading! else { content_is_done_loading(); }

});

}


/////////////////////////////////////////////////////////////////////////////////

function content_is_done_loading(){ $(".loading").fadeOut("slow"); $(".control_button").fadeIn("slow");

//expand and collapse for team pages can be used now $(".expand_collapse.control_button").click(function(){ $(this).next().fadeToggle(400); $(this).toggleClass("less"); });

$("#total_pages_count").append($("#organized_pages li").length + $("#HQ li").length + $("#redirect li").length + $("#team_list li").length + $("#not_sorted li").length );

$("#wiki_pages_count").append($("#organized_pages li").length); $("#hq_pages_count").append($("#HQ li").length); $("#redirect_pages_count").append($("#redirect li").length); $("#not_sorted_pages_count").append($("#not_sorted li").length); $("#team_pages_count").append($("#team_list li").length);

}


/////////////////////////////////////////////////////////////////////////////////


function sort_pages ( page_name , page_link ) {


//this stores the id to where the page will appended to var id_to_append_to;

//this variable will have the page name with only the necessary information for being displayed var page_name_display = page_name.substring(page_name.lastIndexOf("/")+1, page_name.length);

// clean page name from empty spaces page_name = page_name.replace(/ /g,"_");

//this stores the id for the sublist that is created in order to nest pages in the append_page function var page_sublist_id = "Sitemap0" ;



// first, check if a page is a redirect or a special case. If not... if ( is_it_a_special_page ( page_name, page_link ) == false ) {

// check how many "tiers" ( / ) the page name has in order to place it appropiately switch ( (page_name.match( /\//g ) || []).length ) {


// this might be a hub or a team page case 0: if(page_name.substring(0,5) == "Team:"){ id_to_append_to = "#team_list"; page_sublist_id = page_sublist_id + page_name.replace( /:/g , "0"); append_main_team_page(id_to_append_to, page_name, page_name_display, page_sublist_id); } else { id_to_append_to = "#organized_pages"; page_sublist_id = page_sublist_id + page_name; append_page(id_to_append_to, page_name, page_name_display, page_sublist_id); } break;


//this page is under a hub or under a team page case 1:

page_sublist_id = page_sublist_id + page_name.replace( /\//g , "0"); id_to_append_to = "#Sitemap0"+ page_name.substring(0, page_name.indexOf("/"));

if(page_name.substring(0,5) == "Team:"){

console.log(page_name); console.log(id_to_append_to); console.log(page_sublist_id); //console.log("2021.igem.org/Team:Example2/"+ ( page_sublist_id.substring( 22, page_sublist_id.length) ) );

id_to_append_to = id_to_append_to.replace( /:/g , "0"); page_sublist_id = page_sublist_id.replace( /:/g , "0");


}

append_page(id_to_append_to, page_name, page_name_display, page_sublist_id);

break;


//this page is under a submenu case 2:

id_to_append_to = "#" + page_sublist_id + page_name.substring(0, page_name.lastIndexOf("/")); id_to_append_to = id_to_append_to.replace( /\//g , "0"); page_sublist_id = page_sublist_id + page_name.replace( /\//g , "0");

if(page_name.substring(0,4) == "Team"){ id_to_append_to = id_to_append_to.replace( /:/g , "0"); page_sublist_id = page_sublist_id.replace( /:/g , "0");

}

append_page(id_to_append_to, page_name, page_name_display, page_sublist_id);

break;


// this page has more than 3 "/" case 3: default:

//check if this is a team's page, if so, append to a team namespace if(page_name.substring(0,4) == "Team"){ id_to_append_to = page_name.substring(0, page_name.indexOf("/")); id_to_append_to = "#Sitemap0" + id_to_append_to.replace( /:/g , "0"); page_name_display = page_name.substring( page_name.indexOf("/") +1 , page_name.length); append_page(id_to_append_to, page_name, page_name_display, ""); } // hq pages shouldn't go beyond 3 "/" - append to not sorted else {

$("#not_sorted").append("
  • <a href='"+page_name+"'>"+page_name +"</a>
  • ");

    } break;


    }

    }


    }


    /////////////////////////////////////////////////////////////////////////////////


    //Function to check if the page is a redirect ( a non existing page) function is_it_a_special_page ( page_name, page_link ) {



    // is it a HQ page or a Dev page ? if( page_name.substring(0, 2 ) == "HQ" || page_name.substring(0, page_name.indexOf("/") ) == "Dev" ) {

    $("#HQ").append("
  • <a href='/"+page_name+"'>"+page_name +"</a>
  • ");

    return true; }

    // is it a redirect? else if( page_link.indexOf("mw-redirect") >= 0) {

    //if it is a team page redirect, process it as normal team page if(page_name.substring(0,5) == "Team:"){ return false; } else {

    $("#redirect").append("
  • "+ page_link+"
  • " );

    return true; } }

    //if a page doesn't fall under the menu structure for a specific reason else if (page_name.substring(0,13) == "Common_Ground" || page_name == "Letter") {

    $("#HQ").append("
  • <a href='/"+page_name+"'>"+page_name +"</a>
  • ");

    return true; }

    //if an invisible name is part of the team name (this is a work around a special case with team US AFRL CarrollHS) else if ( page_name.indexOf('​') > -1) {

    return true; }

    //special case for Wuhan else if ( page_name.indexOf('css') > -1) {

    return true; }

    // this page is not a special case, let's sort it! else { return false; }

    }


    /////////////////////////////////////////////////////////////////////////////////


    function append_page (id_to_append_to, page_name, page_name_display, page_sublist_id ) {

    //check if id_to_append_to exists - if not, let's try to append it to another parent so the page is not orphaned var found_where_to_append = false;


    //clean from special chars for the variables using in appending

    id_to_append_to = id_to_append_to.replace(/&/g,'_'); page_sublist_id = page_sublist_id.replace(/&/g,'_');


    //if it has somewhere to be appended if($(id_to_append_to).length > 0) { found_where_to_append = true; }

    else {


    for( i=0; i < (id_to_append_to.match(/0/g) || []).length ; i++){

    //trim to try to find a parent to append to id_to_append_to = id_to_append_to.substring(0, id_to_append_to.lastIndexOf("0"));

    //check if it has somewhere to append, if so break the loop if($(id_to_append_to).length > 0) { found_where_to_append = true; i = 999; }

    }

    }


    // if it didnt have anywhere to append, send it to not sorted if ( found_where_to_append == false){ id_to_append_to ="#not_sorted"; }


    $(id_to_append_to).append("
  • <a href='https://2021.igem.org/"+page_name+"'>"+page_name_display+"</a>
    1. ");


      }



      /////////////////////////////////////////////////////////////////////////////////


      function append_main_team_page (id_to_append_to, page_name, page_name_display, page_sublist_id ) {

      $(id_to_append_to).append("
    2. <a href='https://2021.igem.org/"+page_name+"'>"+page_name_display+"</a>
      1. ");

        }


        /////////////////////////////////////////////////////////////////////////////////