Team:UNITN-Trento/JS/Notebook

From 2013.igem.org

(Difference between revisions)
 
(181 intermediate revisions not shown)
Line 1: Line 1:
/**
/**
-
  *
+
  * Hides/Shows labposts based on active filter
 +
* @return none
  */
  */
 +
function useFilters() {
function useFilters() {
-
if ($("#tn-active-filters-F").val() == "" && $("#tn-active-filters-T").val() == "" && $("#tn-active-filters-D").val() == "") {
+
    if ($("#tn-active-filters-F").val() == "" && $("#tn-active-filters-T").val() == "" && $("#tn-active-filters-D").val() == "") {
-
//Scroll through the  posts
+
        //Scroll through the  posts
-
$(".tn-post").each(function() {
+
        $(".tn-post").each(function() {
-
$(this).css("display","block");
+
            $(this).css("display", "block");
-
});
+
        });
-
} else {
+
    } else {
-
//Get active filters
+
        //Get active filters
-
Ffilters = $("#tn-active-filters-F").val().split("-");
+
        Ffilters = $("#tn-active-filters-F").val().split("-");
-
Tfilter = $("#tn-active-filters-T").val();
+
        Tfilter = $("#tn-active-filters-T").val();
-
Dfilter = $("#tn-active-filters-D").val();
+
        Dfilter = $("#tn-active-filters-D").val();
-
//Scroll through the  posts
+
        //Scroll through the  posts
-
$(".tn-post").each(function() {
+
        $(".tn-post").each(function() {
-
faces = $(this).attr("data-user").split("-");
+
            faces = $(this).attr("data-user").split("-");
-
facesLow = [];
+
            facesLow = [];
-
for (var i = 0; i < faces.length; i++) {
+
            for (var i = 0; i < faces.length; i++) {
-
facesLow.push(faces[i].toLowerCase());
+
                facesLow.push(faces[i].toLowerCase());
-
}
+
            }
-
tags = $(this).attr("data-tag").split("-");
+
            tags = $(this).attr("data-tag").split("-");
-
date = $(this).attr("data-date");
+
            date = $(this).attr("data-date");
-
+
-
keepThis1 = true;
+
-
if($("#tn-active-filters-F").val() != "") {
+
-
//If one of the active filters is not present, hide the post
+
-
for (var i = 0; i < Ffilters.length; i++) {
+
-
if(facesLow.indexOf(Ffilters[i].toLowerCase()) == -1) {
+
-
keepThis1 = false;
+
-
}
+
-
}
+
-
}
+
-
+
-
keepThis2 = true;
+
-
if (Tfilter != "") {
+
-
keepThis2 = false;
+
-
//If the active tag filter is not present, hide the post
+
-
for (var k = 0; k < tags.length; k++) {
+
-
if (tags[k].toLowerCase().trim() === Tfilter && !keepThis2) {
+
-
keepThis2 = true;
+
-
}
+
-
}
+
-
}
+
-
keepThis3 = true;
+
            keepThis1 = true;
-
if (Dfilter != "") {
+
            if ($("#tn-active-filters-F").val() != "") {
-
keepThis3 = false;
+
                //If one of the active filters is not present, hide the post
-
if (date == Dfilter) {
+
                for (var i = 0; i < Ffilters.length; i++) {
-
keepThis3 = true;
+
                    if (facesLow.indexOf(Ffilters[i].toLowerCase()) == -1) {
-
}
+
                        keepThis1 = false;
-
}
+
                    }
-
+
                }
-
keepThis = false;
+
            }
-
//Combine tags and faces filters
+
-
if (keepThis1 && keepThis2 && keepThis3) { keepThis = true; }
+
-
//Act
+
            keepThis2 = true;
-
if ( !keepThis ) {
+
            if (Tfilter != "") {
-
$(this).css("display","none");
+
                keepThis2 = false;
-
} else {
+
                //If the active tag filter is not present, hide the post
-
$(this).css("display","block");
+
                for (var k = 0; k < tags.length; k++) {
-
}
+
                    if (tags[k].toLowerCase().trim() === Tfilter && !keepThis2) {
-
});
+
                        keepThis2 = true;
-
}
+
                    }
 +
                }
 +
            }
 +
 
 +
            keepThis3 = true;
 +
            if (Dfilter != "") {
 +
                keepThis3 = false;
 +
                if (date == Dfilter) {
 +
                    keepThis3 = true;
 +
                }
 +
            }
 +
 
 +
            keepThis = false;
 +
            //Combine tags and faces filters
 +
            if (keepThis1 && keepThis2 && keepThis3) {
 +
                keepThis = true;
 +
            }
 +
 
 +
            //Act
 +
            if (!keepThis) {
 +
                $(this).css("display", "none");
 +
            } else {
 +
                $(this).css("display", "block");
 +
            }
 +
        });
 +
    }
 +
}
 +
 
 +
/**
 +
* Changes border color of every image with the same source of the clicked one
 +
* @param Object parent the <a> tag containing the image
 +
* @param String color
 +
*/
 +
 
 +
function setBorder(parent, color) {
 +
    img = parent.children();
 +
 
 +
    $("img").each(function() {
 +
        if ($(this).attr("src") == img.attr("src")) {
 +
            $(this).css("border", "2px solid " + color);
 +
        }
 +
    });
 +
}
 +
 
 +
/**
 +
* Rebuilds the calendar changing the month
 +
* @param Integer yyyy
 +
* @param Integer month
 +
* @param Integer days
 +
*/
 +
 
 +
function setMonth(yyyy, month, days) {
 +
    //reset
 +
    $("#tn-calendar-table td").text("");
 +
    $("#tn-calendar-table td").attr("data-date", "");
 +
 
 +
    //Start
 +
    var days = 0;
 +
    //Set
 +
    switch (month) {
 +
        case 1:
 +
            {
 +
                $(".tn-month.tn-name").text("January 2013");
 +
                days = 31;
 +
                break;
 +
            }
 +
        case 2:
 +
            {
 +
                $(".tn-month.tn-name").text("February 2013");
 +
                days = 30;
 +
                break;
 +
            }
 +
        case 3:
 +
            {
 +
                $(".tn-month.tn-name").text("March 2013");
 +
                days = 31;
 +
                break;
 +
            }
 +
        case 4:
 +
            {
 +
                $(".tn-month.tn-name").text("April 2013");
 +
                days = 30;
 +
                break;
 +
            }
 +
        case 5:
 +
            {
 +
                $(".tn-month.tn-name").text("May 2013");
 +
                days = 31;
 +
                break;
 +
            }
 +
        case 6:
 +
            {
 +
                $(".tn-month.tn-name").text("June 2013");
 +
                days = 30;
 +
                break;
 +
            }
 +
        case 7:
 +
            {
 +
                $(".tn-month.tn-name").text("July 2013");
 +
                days = 31;
 +
                break;
 +
            }
 +
        case 8:
 +
            {
 +
                $(".tn-month.tn-name").text("August 2013");
 +
                days = 31;
 +
                break;
 +
            }
 +
        case 9:
 +
            {
 +
                $(".tn-month.tn-name").text("September 2013");
 +
                days = 30;
 +
                break;
 +
            }
 +
        case 10:
 +
            {
 +
                $(".tn-month.tn-name").text("October 2013");
 +
                days = 31;
 +
                break;
 +
            }
 +
        case 11:
 +
            {
 +
                $(".tn-month.tn-name").text("November 2013");
 +
                days = 30;
 +
                break;
 +
            }
 +
        case 12:
 +
            {
 +
                $(".tn-month.tn-name").text("December 2013");
 +
                days = 31;
 +
                break;
 +
            }
 +
    }
 +
    var week = 1;
 +
    //$("#week-"+week+" td").get(0).text("Prova");
 +
    for (var i = 1; i <= days; i++) {
 +
        pos = new Date(yyyy, month - 1, i, 0, 0, 0, 0).getDay();
 +
        $("#week-" + week + " td").eq(pos).text(i);
 +
        smonth = "" + month;
 +
        si = "" + i;
 +
        if (smonth.length == 1) {
 +
            smonth = "0" + smonth;
 +
        }
 +
        if (si.length == 1) {
 +
            si = "0" + si;
 +
        }
 +
        $("#week-" + week + " td").eq(pos).attr("data-date", yyyy + "-" + smonth + "-" + si);
 +
        if (pos == 6) {
 +
            week++;
 +
        }
 +
    }
 +
    $("#tn-calendar-table").attr("data-month", month);
}
}
Line 73: Line 203:
  *
  *
  */
  */
-
function setBorder(parent,color) {
 
-
img = parent.children();
 
-
$("img").each(function() {
+
function getJSONstepped(options) {
-
if ($(this).attr("src") == img.attr("src")) {
+
    //Verify options
-
$(this).css("border","1px solid "+color);
+
    var i, data_list;
-
}
+
    if (undefined === options.a_list) {
-
});
+
        return;
 +
    } else {
 +
        var a_list = options.a_list;
 +
    }
 +
    if (undefined === options.startingIndex) {
 +
        i = 0;
 +
    } else {
 +
        i = options.startingIndex;
 +
    }
 +
    if (undefined === options.data_list) {
 +
        data_list = [];
 +
    } else {
 +
        data_list = options.data_list;
 +
    }
 +
    if (undefined === options.success) {
 +
        return;
 +
    } else {
 +
        var success = options.success;
 +
    }
 +
    if (undefined === options.errorCounter) {
 +
        var errorCounter = 0;
 +
    } else {
 +
        var errorCounter = options.errorCounter;
 +
    }
 +
    if (undefined === options.errorList) {
 +
        var errorList = [];
 +
    } else {
 +
        var errorList = options.errorList;
 +
    }
 +
 
 +
    if ($(a_list).length > i) {
 +
 
 +
        //Get url
 +
        var href = $(a_list).eq(i).attr('href');
 +
 
 +
        //Get id
 +
        var id = href.split("/");
 +
        id = id[id.length - 1];
 +
 
 +
        //Make AJAX request
 +
        $.ajax({
 +
            type: 'GET',
 +
            dataType: 'json',
 +
            url: href + "?action=raw&ctype=text/javascript",
 +
            //timeout: 3000,
 +
            success: function(data, textStatus) {
 +
                data.id = id;
 +
                data_list.push(data);
 +
 
 +
                data.content = data.content.split("{{:Team:UNITN-Trento/Templates/Styles/Spoiler|").join("<div class='tn-spoiler'><a href=''>");
 +
                data.content = data.content.split("|").join("</a><div><center>");
 +
                data.content = data.content.split("}}").join("</center></div></div>");
 +
 
 +
                div = $('<div></div>').attr('id', 'tn-post-' + data.date + "-" + data.author).addClass('tn-post').attr('data-user', data.author).attr('data-title', data.title).attr('data-date', data.date).attr('data-tag', data.tags).append($("<div></div>").addClass('tn-text').html(data.content)).prepend($("<a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/0" + monthn + "/" + data.id + "?action=edit' class='tn-editpost'><img src='https://static.igem.org/mediawiki/2013/0/04/Tn-20130709-edit_button.png' title='Edit' alt='Edit' /></a>"));
 +
 
 +
                $("<center></center>").append($(div)).prependTo($("#aj_cont"));
 +
 
 +
                setPost('#tn-post-' + data.date + "-" + data.author);
 +
                // alert("p"+post.id);
 +
 
 +
                getJSONstepped({
 +
                    'a_list': a_list,
 +
                    'startingIndex': i + 1,
 +
                    'data_list': data_list,
 +
                    'success': function(a) {
 +
                        options.success(a);
 +
                    },
 +
                    'errorCounter' : errorCounter,
 +
                    'errorList' : errorList
 +
                });
 +
            },
 +
            error: function(data, textStatus) {
 +
                //alert(id + " - " + textStatus);
 +
                if ( "timeout" === textStatus ) {
 +
                    errorCounter += 1;
 +
                }
 +
                errorList.push(textStatus);
 +
                getJSONstepped({
 +
                    'a_list': a_list,
 +
                    'startingIndex': i + 1,
 +
                    'data_list': data_list,
 +
                    'success': function(a) {
 +
                        options.success(a);
 +
                    },
 +
                    'errorCounter' : errorCounter,
 +
                    'errorList' : errorList
 +
                });
 +
            }
 +
        });
 +
 
 +
    } else {
 +
        if ( 0 != errorCounter ) {
 +
            alert(errorCounter + " 'timeout' errors occurred.");
 +
        }
 +
        success(data_list);
 +
    }
}
}
Line 86: Line 309:
  *
  *
  */
  */
-
function setMonth(yyyy,month,days) {
+
function fillBook(month) {
-
//reset
+
    //empty book
-
$("#tn-calendar-table td").text("");
+
    $("#aj_cont center").remove();
-
$("#tn-calendar-table td").attr("data-date","");
+
    //Shows loading message
 +
    $("#aj_load").fadeIn();
 +
    //Show correct active timeSelect buttons and de-activate all the timeSelect buttons
 +
    $(".tn-button").removeClass("active");
 +
    $(".tn-button."+month).addClass("active");
 +
    $(".tn-button").removeAttr("href");
 +
    //Remove tags
 +
    $("#tn-filter-tags option").remove();
 +
    $("#tn-filter-tags").append("<option value=''></option>")
 +
    //Set correct month on the calendar
 +
    switch ( month ) {
 +
        case 'may': {
 +
            monthn = 5;
 +
            break;
 +
        }
 +
        case 'june': {
 +
            monthn = 6;
 +
            break;
 +
        }
 +
        case 'july': {
 +
            monthn = 7;
 +
            break;
 +
        }
 +
        case 'august': {
 +
            monthn = 8;
 +
            break;
 +
        }
 +
        case 'september': {
 +
            monthn = 9;
 +
            break;
 +
        }
 +
    }
 +
    //Creates the calendar
 +
    var today = new Date();
 +
    var dd = today.getDate(),
 +
        wd = today.getDay();
 +
    var mm = today.getMonth() + 1;
 +
    var yyyy = today.getFullYear();
 +
    setMonth(yyyy, monthn);
-
//Start
+
    /**************************************/
-
var days = 0;
+
    /**GET THE POSTs BACK IN THE TEMPLATE**/
-
//Set
+
    /**************************************/
-
switch(month) {
+
    var c = 1;
-
case 1: { $("#tn-month").text("January 2013"); days = 31; break; }
+
    var calenMap = {};
-
case 2: { $("#tn-month").text("February 2013"); days = 30; break; }
+
    var calenOrdered = [];
-
case 3: { $("#tn-month").text("March 2013"); days = 31; break; }
+
 
-
case 4: { $("#tn-month").text("April 2013"); days = 30; break; }
+
    //Get posts from AJAX
-
case 5: { $("#tn-month").text("May 2013"); days = 31; break; }
+
    getJSONstepped({
-
case 6: { $("#tn-month").text("June 2013"); days = 30; break; }
+
        'a_list': "#aj_index_" + month + " a",
-
case 7: { $("#tn-month").text("July 2013"); days = 31; break; }
+
        'success': function(data_list) {
-
case 8: { $("#tn-month").text("August 2013"); days = 31; break; }
+
            /*
-
case 9: { $("#tn-month").text("September 2013"); days = 30; break; }
+
            var last_id = 0,
-
case 10: { $("#tn-month").text("October 2013"); days = 31; break; }
+
                href = "";
-
case 11: { $("#tn-month").text("November 2013"); days = 30; break; }
+
 
-
case 12: { $("#tn-month").text("December 2013"); days = 31; break; }
+
            //Iterate through all posts and order them
-
}
+
            $(data_list).each(function(i, p) {
-
var week = 1;
+
                // alert("s"+p.id);
-
//$("#week-"+week+" td").get(0).text("Prova");
+
                if (last_id < parseInt(p.id)) {
-
for (var i = 1; i <= days; i++) {
+
                    last_id = parseInt(p.id);
-
pos = new Date(yyyy, month-1, i, 0, 0, 0, 0).getDay();
+
                }
-
$("#week-"+week+" td").eq(pos).text(i);
+
 
-
smonth = ""+month;
+
                //Get post date
-
si = ""+i;
+
                date = p.date.split("-");
-
if(smonth.length == 1) { smonth = "0" + smonth; }
+
 
-
if(si.length == 1) { si = "0" + si; }
+
                calenMap[date[0] + ":" + date[1] + ":" + date[2] + ":" + i] = p;
-
$("#week-"+week+" td").eq(pos).attr("data-date",yyyy+"-"+smonth+"-"+si);
+
                calenOrdered.push(date[0] + ":" + date[1] + ":" + date[2] + ":" + i);
-
if (pos == 6) { week++; }
+
            });
-
}
+
 
-
$("#tn-calendar-table").attr("data-month",month);
+
            //Add posts to the page in an ordered way
 +
            calenOrdered.sort();
 +
            $("#aj_load").fadeOut();
 +
            for (var key in calenOrdered) {
 +
                post = calenMap[calenOrdered[key]];
 +
 
 +
                post.content = post.content.split("{{:Team:UNITN-Trento/Templates/Styles/Spoiler|").join("<div class='tn-spoiler'><a href=''>");
 +
                post.content = post.content.split("|").join("</a><div><center>");
 +
                post.content = post.content.split("}}").join("</center></div></div>");
 +
 
 +
                div = $('<div></div>').attr('id', 'tn-post-' + post.date + "-" + post.author).addClass('tn-post').attr('data-user', post.author).attr('data-title', post.title).attr('data-date', post.date).attr('data-tag', post.tags).append($("<div></div>").addClass('tn-text').html(post.content)).prepend($("<a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/0" + monthn + "/" + post.id + "?action=edit' class='tn-editpost'><img src='https://static.igem.org/mediawiki/2013/0/04/Tn-20130709-edit_button.png' title='Edit' alt='Edit' /></a>"));
 +
 
 +
                $("<center></center>").append($(div)).prependTo($("#aj_cont"));
 +
 
 +
                setPost('#tn-post-' + post.date + "-" + post.author);
 +
                // alert("p"+post.id);
 +
            }
 +
            */
 +
            $("#aj_load").fadeOut();
 +
            /*Spoiler JS*/
 +
            $(".tn-spoiler div").slideUp();
 +
            $(".tn-spoiler a").click(function(e) {
 +
                e.preventDefault();
 +
                $(".tn-spoiler-active").removeClass("tn-spoiler-active");
 +
                $(this).parent().addClass("tn-spoiler-active");
 +
                $(".tn-spoiler").not(".tn-spoiler-active").children("div").slideUp();
 +
                $(".tn-spoiler-active").children("div").slideToggle();
 +
            });
 +
 
 +
            //"Add Post" Buttons
 +
            // $("#tn-content").prepend("<center><a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/" + (parseInt(last_id) + 1) + "?action=edit&preload=Team:UNITN-Trento/Help/Labpost_AJAX'  class='tn-addpost'>Add new labPost</a></center>".replace("amp;", ""));
 +
            // $("#tn-content").append("<center><a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/" + (parseInt(last_id) + 1) + "?action=edit&preload=Team:UNITN-Trento/Help/Labpost_AJAX'  class='tn-addpost'>Add new labPost</a></center>".replace("amp;", ""));
 +
 
 +
            /*************/
 +
            /**FILTERS 1**/
 +
            /*************/
 +
 
 +
            //Add tags to the select filter option
 +
            var added = [];
 +
            $(".tag").each(function() {
 +
                if (added.indexOf($(this).text().toLowerCase().trim()) == -1) {
 +
                    added.push($(this).text().toLowerCase().trim());
 +
                    $("#tn-filter-tags").append("<option value='" + $(this).text().toLowerCase().trim() + "'>" + $(this).text().toLowerCase().trim() + "</option>");
 +
                }
 +
            });
 +
           
 +
            //Set TAGS filters
 +
            $("#tn-filter-tags").change(function(e) {
 +
                e.preventDefault();
 +
                $("#tn-active-filters-T").val($("#tn-filter-tags").val());
 +
                //Apply active filters
 +
                useFilters();
 +
            });
 +
 
 +
            //Reactivate timeSelect buttons
 +
            $(".tn-button").each(function() {
 +
                $(this).attr("href" , $(this).attr("data-href"));
 +
            });
 +
        }
 +
    });
}
}
-
//Acts when the document is loaded
+
/**
-
$(document).ready(function() {
+
*
 +
*/
 +
function addPost() {
 +
    //Get month as string
 +
    month = $(".tn-button.active").attr('data-href').split("'")[1];
 +
    //Get month number
 +
    switch ( month ) {
 +
        case 'may': {
 +
            monthn = "05";
 +
            break;
 +
        }
 +
        case 'june': {
 +
            monthn = "06";
 +
            break;
 +
        }
 +
        case 'july': {
 +
            monthn = "07";
 +
            break;
 +
        }
 +
        case 'august': {
 +
            monthn = "08";
 +
            break;
 +
        }
 +
        case 'september': {
 +
            monthn = "09";
 +
            break;
 +
        }
 +
    }
 +
   
 +
    //Get last_id of actve.month's post
 +
    var last_id = 0;
 +
    $("#aj_index_"+month+" a").each(function() {
 +
        lhref = $(this).attr('href').split("/");
 +
        id = lhref[lhref.length - 1];
 +
        if ( last_id < parseInt(id) ) { last_id = parseInt(id); }
 +
    });
-
/**GET THE POSTs BACK IN THE TEMPLATE**/
+
    //Go to edit of new post
-
var c = 1;
+
    document.location.href = "https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/"+monthn+"/"+(last_id + 1)+"?action=edit&preload=Team:UNITN-Trento/Help/Labpost_AJAX";
-
var calenMap = {};
+
}
-
//Iterate through all posts and order them
 
-
$(".tn-post").each(function() {
 
-
//Get post date
 
-
date = $(this).attr("data-date").split("-");
 
-
if (calenMap["a"+date[0]] == undefined ) {
+
//Acts when the document is loaded
-
calenMap["a"+date[0]] = {};
+
$(document).ready(function() {
-
calenMap["a"+date[0]]["m"+date[1]] = {};
+
    /***********/
-
calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]] = {};
+
    /**FILTERS**/
-
calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]]["s"+c] = $(this);
+
    /***********/
-
} else {
+
-
if (calenMap["a"+date[0]]["m"+date[1]] == undefined) {
+
-
calenMap["a"+date[0]]["m"+date[1]] = {};
+
-
calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]] = {};
+
-
calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]]["s"+c] = $(this);
+
-
} else {
+
-
if (calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]] == undefined) {
+
-
calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]] = {};
+
-
calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]]["s"+c] = $(this);
+
-
} else {
+
-
calenMap["a"+date[0]]["m"+date[1]]["g"+date[2]]["s"+c] = $(this);
+
-
}
+
-
}
+
-
}
+
-
c++;
+
-
});
+
-
+
-
//Add posts to the page in an ordered way
+
-
for (var ykey in calenMap) {
+
-
var year = calenMap[ykey];
+
-
for (var mkey in year) {
+
-
var month = year[mkey];
+
-
for (var dkey in month) {
+
-
var day = month[dkey];
+
-
for (var skey in day) {
+
-
var post = day[skey];
+
-
var section = skey.replace(/\D/g,'');
+
-
$(post).parent().prependTo($("#tn-content"));
+
-
$(post).append("<a href='?title=Team:UNITN-Trento/Notebook&action=edit&section="+section+"'>Edit</a>");
+
-
}
+
-
}
+
-
}
+
-
}
+
-
//"Add Post" Link
+
    //Select all the FACES filters
-
var maxSectionId = 0;
+
    $(".faces").each(function() {
-
$("h2 .editsection a").each(function() {
+
        //Set the click event
-
tempId = parseInt($(this).attr("title").split(":")[1].trim());
+
        $(this).click(function(e) {
-
if(tempId > maxSectionId) { maxSectionId = tempId; }
+
            //Rewrite default
-
});
+
            e.preventDefault();
-
$("#tn-content").prepend("<a href='?title=Team:UNITN-Trento/Notebook&action=edit&section=new&preloadtitle="+(maxSectionId+1)+"'>Add new labPost</a>");
+
-
/**FILTERS**/
+
            faceBox = $(this);
-
//Add tags to the select filter option
+
            hidBox = $("#tn-active-filters-F");
-
var added = [];
+
            name = faceBox.attr("href");
-
$(".tag").each(function() {
+
-
if (added.indexOf($(this).text().toLowerCase().trim()) == -1) {
+
-
added.push($(this).text().toLowerCase().trim());
+
-
$("#tn-filters-tags").append("<option value='"+$(this).text().toLowerCase().trim()+"'>"+$(this).text().toLowerCase().trim()+"</option>");
+
-
}
+
-
});
+
-
//Set TAGS filters
+
-
$("#tn-filters-tags").change(function(e) {
+
-
e.preventDefault();
+
-
$("#tn-active-filters-T").val($("#tn-filters-tags").val());
+
-
//Apply active filters
+
-
useFilters();
+
-
});
+
-
//Select all the FACES filters
+
            //If there is no filter active
-
$(".faces").each(function() {
+
            if (hidBox.val() == "") {
-
//Set the click event
+
                //Add the current to the active filters
-
$(this).click(function(e) {
+
                hidBox.val(name);
-
//Rewrite default
+
                setBorder(faceBox, "rgb(191, 27, 57)");
-
e.preventDefault();
+
            } else {
 +
                //If there are active filters, get them
 +
                arnames = hidBox.val().split("-");
-
faceBox = $(this);
+
                //If the current is not active, activate it
-
hidBox = $("#tn-active-filters-F");
+
                if (arnames.indexOf(name) == -1) {
-
name = faceBox.attr("href");
+
                    hidBox.val(hidBox.val() + "-" + name);
-
+
                    setBorder(faceBox, "rgb(191, 27, 57)");
-
//If there is no filter active
+
                } else {
-
if ( hidBox.val() == "") {
+
                    //If the current is active, deactivate it
-
//Add the current to the active filters
+
                    arnames.splice(arnames.indexOf(name), 1);
-
hidBox.val(name);
+
                    hidBox.val(arnames.join("-"));
-
setBorder(faceBox,"red");
+
                    setBorder(faceBox, "rgb(240, 242, 223)");
-
} else {
+
                }
-
//If there are active filters, get them
+
            }
-
arnames = hidBox.val().split("-");
+
-
//If the current is not active, activate it
+
            //Apply active filters
-
if ( arnames.indexOf(name) == -1) {
+
            useFilters();
-
hidBox.val(hidBox.val()+"-"+name);
+
        });
-
setBorder(faceBox,"red");
+
    });
-
} else {
+
-
//If the current is active, deactivate it
+
-
arnames.splice(arnames.indexOf(name),1);
+
-
hidBox.val(arnames.join("-"));
+
-
setBorder(faceBox,"black");
+
-
}
+
-
}
+
-
//Apply active filters
+
    /**********/
-
useFilters();
+
    /*CALENDAR*/
-
});
+
    /**********/
-
});
+
-
/*CALENDAR*/
+
    //Creates the calendar
-
//Creates the calendar
+
    var today = new Date();
-
var today = new Date();
+
    var dd = today.getDate(),
-
var dd = today.getDate(), wd = today.getDay();
+
        wd = today.getDay();
-
var mm = today.getMonth()+1;
+
    var mm = today.getMonth() + 1;
-
var yyyy = today.getFullYear();
+
    var yyyy = today.getFullYear();
-
setMonth(yyyy,mm);
+
    setMonth(yyyy, mm);
-
//Click
+
    //Click
-
$("#tn-month-fw a").click(function(e) {
+
    $(".tn-month.tn-fw a").click(function(e) {
-
e.preventDefault();
+
        e.preventDefault();
-
$("#tn-calendar-table td").css("border","1px solid black");
+
        $("#tn-calendar-table td").css("border", "1px solid rgb(3, 140, 126)");
-
setMonth(yyyy,parseInt($("#tn-calendar-table").attr("data-month"))+1);
+
        setMonth(yyyy, parseInt($("#tn-calendar-table").attr("data-month")) + 1);
-
});
+
    });
-
$("#tn-month-bw a").click(function(e) {
+
    $(".tn-month.tn-bw a").click(function(e) {
-
e.preventDefault();
+
        e.preventDefault();
-
$("#tn-calendar-table td").css("border","1px solid black");
+
        $("#tn-calendar-table td").css("border", "1px solid rgb(3, 140, 126)");
-
setMonth(yyyy,parseInt($("#tn-calendar-table").attr("data-month"))-1);
+
        setMonth(yyyy, parseInt($("#tn-calendar-table").attr("data-month")) - 1);
-
});
+
    });
-
//Set link on calendar
+
    //Set link on calendar
-
$("#tn-calendar-table td").each(function() {
+
    $("#tn-calendar-table td").each(function() {
-
$(this).click(function(e) {
+
        $(this).click(function(e) {
-
e.preventDefault();
+
            e.preventDefault();
-
$("#tn-calendar-table td").css("border","1px solid black");
+
            $("#tn-calendar-table td").css("border", "1px solid rgb(3, 140, 126)");
-
if ($("#tn-active-filters-D").val() == $(this).attr("data-date")) {
+
            if ($("#tn-active-filters-D").val() == $(this).attr("data-date")) {
-
$("#tn-active-filters-D").val("");
+
                $("#tn-active-filters-D").val("");
-
} else {
+
            } else {
-
$(this).css("border","1px solid red");
+
                $(this).css("border", "1px solid rgb(191, 27, 57)");
-
$("#tn-active-filters-D").val($(this).attr("data-date"));
+
                $("#tn-active-filters-D").val($(this).attr("data-date"));
-
}
+
            }
-
//Apply active filters
+
            //Apply active filters
-
useFilters();
+
            useFilters();
-
});
+
        });
-
});
+
    });
-
/**SCROLL TO POST BASED ON HASH**/
+
    /*FILL BOOK*/
-
$("html,body").scrollTo(document.location.hash.replace("#",""),document.location.hash.replace("#",""));
+
    fillBook('september');
-
});
+
-
//When hash changes, scroll to correct div
+
    /**SCROLL TO POST BASED ON HASH**/
-
oHch(function() {
+
    //$("html,body").scrollTo(document.location.hash.replace("#", ""), document.location.hash.replace("#", ""));
-
$("html,body").scrollTo(document.location.hash.replace("#",""),document.location.hash.replace("#",""));
+
});
});
 +
 +
// //When hash changes, scroll to correct div
 +
// oHch(function() {
 +
//  $("html,body").scrollTo(document.location.hash.replace("#", ""), document.location.hash.replace("#", ""));
 +
// });

Latest revision as of 15:47, 3 October 2013

/**

* Hides/Shows labposts based on active filter
* @return none
*/

function useFilters() {

   if ($("#tn-active-filters-F").val() == "" && $("#tn-active-filters-T").val() == "" && $("#tn-active-filters-D").val() == "") {
       //Scroll through the  posts
       $(".tn-post").each(function() {
           $(this).css("display", "block");
       });
   } else {
       //Get active filters
       Ffilters = $("#tn-active-filters-F").val().split("-");
       Tfilter = $("#tn-active-filters-T").val();
       Dfilter = $("#tn-active-filters-D").val();
       //Scroll through the  posts
       $(".tn-post").each(function() {
           faces = $(this).attr("data-user").split("-");
           facesLow = [];
           for (var i = 0; i < faces.length; i++) {
               facesLow.push(faces[i].toLowerCase());
           }
           tags = $(this).attr("data-tag").split("-");
           date = $(this).attr("data-date");
           keepThis1 = true;
           if ($("#tn-active-filters-F").val() != "") {
               //If one of the active filters is not present, hide the post
               for (var i = 0; i < Ffilters.length; i++) {
                   if (facesLow.indexOf(Ffilters[i].toLowerCase()) == -1) {
                       keepThis1 = false;
                   }
               }
           }
           keepThis2 = true;
           if (Tfilter != "") {
               keepThis2 = false;
               //If the active tag filter is not present, hide the post
               for (var k = 0; k < tags.length; k++) {
                   if (tags[k].toLowerCase().trim() === Tfilter && !keepThis2) {
                       keepThis2 = true;
                   }
               }
           }
           keepThis3 = true;
           if (Dfilter != "") {
               keepThis3 = false;
               if (date == Dfilter) {
                   keepThis3 = true;
               }
           }
           keepThis = false;
           //Combine tags and faces filters
           if (keepThis1 && keepThis2 && keepThis3) {
               keepThis = true;
           }
           //Act
           if (!keepThis) {
               $(this).css("display", "none");
           } else {
               $(this).css("display", "block");
           }
       });
   }

}

/**

* Changes border color of every image with the same source of the clicked one
* @param Object parent the <a> tag containing the image
* @param String color
*/

function setBorder(parent, color) {

   img = parent.children();
   $("img").each(function() {
       if ($(this).attr("src") == img.attr("src")) {
           $(this).css("border", "2px solid " + color);
       }
   });

}

/**

* Rebuilds the calendar changing the month
* @param Integer yyyy
* @param Integer month
* @param Integer days
*/

function setMonth(yyyy, month, days) {

   //reset
   $("#tn-calendar-table td").text("");
   $("#tn-calendar-table td").attr("data-date", "");
   //Start
   var days = 0;
   //Set 
   switch (month) {
       case 1:
           {
               $(".tn-month.tn-name").text("January 2013");
               days = 31;
               break;
           }
       case 2:
           {
               $(".tn-month.tn-name").text("February 2013");
               days = 30;
               break;
           }
       case 3:
           {
               $(".tn-month.tn-name").text("March 2013");
               days = 31;
               break;
           }
       case 4:
           {
               $(".tn-month.tn-name").text("April 2013");
               days = 30;
               break;
           }
       case 5:
           {
               $(".tn-month.tn-name").text("May 2013");
               days = 31;
               break;
           }
       case 6:
           {
               $(".tn-month.tn-name").text("June 2013");
               days = 30;
               break;
           }
       case 7:
           {
               $(".tn-month.tn-name").text("July 2013");
               days = 31;
               break;
           }
       case 8:
           {
               $(".tn-month.tn-name").text("August 2013");
               days = 31;
               break;
           }
       case 9:
           {
               $(".tn-month.tn-name").text("September 2013");
               days = 30;
               break;
           }
       case 10:
           {
               $(".tn-month.tn-name").text("October 2013");
               days = 31;
               break;
           }
       case 11:
           {
               $(".tn-month.tn-name").text("November 2013");
               days = 30;
               break;
           }
       case 12:
           {
               $(".tn-month.tn-name").text("December 2013");
               days = 31;
               break;
           }
   }
   var week = 1;
   //$("#week-"+week+" td").get(0).text("Prova");
   for (var i = 1; i <= days; i++) {
       pos = new Date(yyyy, month - 1, i, 0, 0, 0, 0).getDay();
       $("#week-" + week + " td").eq(pos).text(i);
       smonth = "" + month;
       si = "" + i;
       if (smonth.length == 1) {
           smonth = "0" + smonth;
       }
       if (si.length == 1) {
           si = "0" + si;
       }
       $("#week-" + week + " td").eq(pos).attr("data-date", yyyy + "-" + smonth + "-" + si);
       if (pos == 6) {
           week++;
       }
   }
   $("#tn-calendar-table").attr("data-month", month);

}

/**

*
*/

function getJSONstepped(options) {

   //Verify options
   var i, data_list;
   if (undefined === options.a_list) {
       return;
   } else {
       var a_list = options.a_list;
   }
   if (undefined === options.startingIndex) {
       i = 0;
   } else {
       i = options.startingIndex;
   }
   if (undefined === options.data_list) {
       data_list = [];
   } else {
       data_list = options.data_list;
   }
   if (undefined === options.success) {
       return;
   } else {
       var success = options.success;
   }
   if (undefined === options.errorCounter) {
       var errorCounter = 0;
   } else {
       var errorCounter = options.errorCounter;
   }
   if (undefined === options.errorList) {
       var errorList = [];
   } else {
       var errorList = options.errorList;
   }
   if ($(a_list).length > i) {
       //Get url
       var href = $(a_list).eq(i).attr('href');
       //Get id
       var id = href.split("/");
       id = id[id.length - 1];
       //Make AJAX request
       $.ajax({
           type: 'GET',
           dataType: 'json',
           url: href + "?action=raw&ctype=text/javascript",
           //timeout: 3000,
           success: function(data, textStatus) {
               data.id = id;
               data_list.push(data);
               data.content = data.content.split("
{{{1}}}
{{{2}}}
").join("</center></div></div>");
div = $('
').attr('id', 'tn-post-' + data.date + "-" + data.author).addClass('tn-post').attr('data-user', data.author).attr('data-title', data.title).attr('data-date', data.date).attr('data-tag', data.tags).append($("
").addClass('tn-text').html(data.content)).prepend($("<a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/0" + monthn + "/" + data.id + "?action=edit' class='tn-editpost'><img src='https://static.igem.org/mediawiki/2013/0/04/Tn-20130709-edit_button.png' title='Edit' alt='Edit' /></a>")); $("
").append($(div)).prependTo($("#aj_cont"));
               setPost('#tn-post-' + data.date + "-" + data.author);
               // alert("p"+post.id);
               getJSONstepped({
                   'a_list': a_list,
                   'startingIndex': i + 1,
                   'data_list': data_list,
                   'success': function(a) {
                       options.success(a);
                   },
                   'errorCounter' : errorCounter,
                   'errorList' : errorList
               });
           },
           error: function(data, textStatus) {
               //alert(id + " - " + textStatus);
               if ( "timeout" === textStatus ) {
                   errorCounter += 1;
               }
               errorList.push(textStatus);
               getJSONstepped({
                   'a_list': a_list,
                   'startingIndex': i + 1,
                   'data_list': data_list,
                   'success': function(a) {
                       options.success(a);
                   },
                   'errorCounter' : errorCounter,
                   'errorList' : errorList
               });
           }
       });
   } else {
       if ( 0 != errorCounter ) {
           alert(errorCounter + " 'timeout' errors occurred.");
       }
       success(data_list);
   }

}

/**

*
*/

function fillBook(month) {

   //empty book
   $("#aj_cont center").remove();
   //Shows loading message
   $("#aj_load").fadeIn();
   //Show correct active timeSelect buttons and de-activate all the timeSelect buttons
   $(".tn-button").removeClass("active");
   $(".tn-button."+month).addClass("active");
   $(".tn-button").removeAttr("href");
   //Remove tags
   $("#tn-filter-tags option").remove();
   $("#tn-filter-tags").append("<option value=></option>")
   //Set correct month on the calendar
   switch ( month ) {
       case 'may': {
           monthn = 5;
           break;
       }
       case 'june': {
           monthn = 6;
           break;
       }
       case 'july': {
           monthn = 7;
           break;
       }
       case 'august': {
           monthn = 8;
           break;
       }
       case 'september': {
           monthn = 9;
           break;
       }
   }
   //Creates the calendar
   var today = new Date();
   var dd = today.getDate(),
       wd = today.getDay();
   var mm = today.getMonth() + 1;
   var yyyy = today.getFullYear();
   setMonth(yyyy, monthn);
   /**************************************/
   /**GET THE POSTs BACK IN THE TEMPLATE**/
   /**************************************/
   var c = 1;
   var calenMap = {};
   var calenOrdered = [];
   //Get posts from AJAX
   getJSONstepped({
       'a_list': "#aj_index_" + month + " a",
       'success': function(data_list) {
           /*
           var last_id = 0,
               href = "";
           //Iterate through all posts and order them
           $(data_list).each(function(i, p) {
               // alert("s"+p.id);
               if (last_id < parseInt(p.id)) {
                   last_id = parseInt(p.id);
               }
               //Get post date
               date = p.date.split("-");
               calenMap[date[0] + ":" + date[1] + ":" + date[2] + ":" + i] = p;
               calenOrdered.push(date[0] + ":" + date[1] + ":" + date[2] + ":" + i);
           });
           //Add posts to the page in an ordered way
           calenOrdered.sort();
           $("#aj_load").fadeOut();
           for (var key in calenOrdered) {
               post = calenMap[calenOrdered[key]];
               post.content = post.content.split("
{{{1}}}
{{{2}}}
").join("</center></div></div>");
div = $('
').attr('id', 'tn-post-' + post.date + "-" + post.author).addClass('tn-post').attr('data-user', post.author).attr('data-title', post.title).attr('data-date', post.date).attr('data-tag', post.tags).append($("
").addClass('tn-text').html(post.content)).prepend($("<a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/0" + monthn + "/" + post.id + "?action=edit' class='tn-editpost'><img src='https://static.igem.org/mediawiki/2013/0/04/Tn-20130709-edit_button.png' title='Edit' alt='Edit' /></a>")); $("
").append($(div)).prependTo($("#aj_cont"));
               setPost('#tn-post-' + post.date + "-" + post.author);
               // alert("p"+post.id);
           }
           */
           $("#aj_load").fadeOut();
           /*Spoiler JS*/
           $(".tn-spoiler div").slideUp();
           $(".tn-spoiler a").click(function(e) {
               e.preventDefault();
               $(".tn-spoiler-active").removeClass("tn-spoiler-active");
               $(this).parent().addClass("tn-spoiler-active");
               $(".tn-spoiler").not(".tn-spoiler-active").children("div").slideUp();
               $(".tn-spoiler-active").children("div").slideToggle();
           });
           //"Add Post" Buttons
// $("#tn-content").prepend("
<a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/" + (parseInt(last_id) + 1) + "?action=edit&preload=Team:UNITN-Trento/Help/Labpost_AJAX' class='tn-addpost'>Add new labPost</a>
".replace("amp;", "")); // $("#tn-content").append("
<a href='https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/" + (parseInt(last_id) + 1) + "?action=edit&preload=Team:UNITN-Trento/Help/Labpost_AJAX' class='tn-addpost'>Add new labPost</a>
".replace("amp;", ""));
           /*************/
           /**FILTERS 1**/
           /*************/
           //Add tags to the select filter option
           var added = [];
           $(".tag").each(function() {
               if (added.indexOf($(this).text().toLowerCase().trim()) == -1) {
                   added.push($(this).text().toLowerCase().trim());
                   $("#tn-filter-tags").append("<option value='" + $(this).text().toLowerCase().trim() + "'>" + $(this).text().toLowerCase().trim() + "</option>");
               }
           });
           
           //Set TAGS filters
           $("#tn-filter-tags").change(function(e) {
               e.preventDefault();
               $("#tn-active-filters-T").val($("#tn-filter-tags").val());
               //Apply active filters
               useFilters();
           });
           //Reactivate timeSelect buttons
           $(".tn-button").each(function() {
               $(this).attr("href" , $(this).attr("data-href"));
           });
       }
   });

}

/**

*
*/

function addPost() {

   //Get month as string
   month = $(".tn-button.active").attr('data-href').split("'")[1];
   //Get month number
   switch ( month ) {
       case 'may': {
           monthn = "05";
           break;
       }
       case 'june': {
           monthn = "06";
           break;
       }
       case 'july': {
           monthn = "07";
           break;
       }
       case 'august': {
           monthn = "08";
           break;
       }
       case 'september': {
           monthn = "09";
           break;
       }
   }
   
   //Get last_id of actve.month's post
   var last_id = 0;
   $("#aj_index_"+month+" a").each(function() {
       lhref = $(this).attr('href').split("/");
       id = lhref[lhref.length - 1];
       if ( last_id < parseInt(id) ) { last_id = parseInt(id); }
   });
   //Go to edit of new post
   document.location.href = "https://2013.igem.org/Team:UNITN-Trento/Notebook/Labposts/"+monthn+"/"+(last_id + 1)+"?action=edit&preload=Team:UNITN-Trento/Help/Labpost_AJAX";

}


//Acts when the document is loaded $(document).ready(function() {

   /***********/
   /**FILTERS**/
   /***********/
   //Select all the FACES filters
   $(".faces").each(function() {
       //Set the click event
       $(this).click(function(e) {
           //Rewrite default
           e.preventDefault();
           faceBox = $(this);
           hidBox = $("#tn-active-filters-F");
           name = faceBox.attr("href");
           //If there is no filter active
           if (hidBox.val() == "") {
               //Add the current to the active filters
               hidBox.val(name);
               setBorder(faceBox, "rgb(191, 27, 57)");
           } else {
               //If there are active filters, get them
               arnames = hidBox.val().split("-");
               //If the current is not active, activate it
               if (arnames.indexOf(name) == -1) {
                   hidBox.val(hidBox.val() + "-" + name);
                   setBorder(faceBox, "rgb(191, 27, 57)");
               } else {
                   //If the current is active, deactivate it
                   arnames.splice(arnames.indexOf(name), 1);
                   hidBox.val(arnames.join("-"));
                   setBorder(faceBox, "rgb(240, 242, 223)");
               }
           }
           //Apply active filters
           useFilters();
       });
   });
   /**********/
   /*CALENDAR*/
   /**********/
   //Creates the calendar
   var today = new Date();
   var dd = today.getDate(),
       wd = today.getDay();
   var mm = today.getMonth() + 1;
   var yyyy = today.getFullYear();
   setMonth(yyyy, mm);
   //Click
   $(".tn-month.tn-fw a").click(function(e) {
       e.preventDefault();
       $("#tn-calendar-table td").css("border", "1px solid rgb(3, 140, 126)");
       setMonth(yyyy, parseInt($("#tn-calendar-table").attr("data-month")) + 1);
   });
   $(".tn-month.tn-bw a").click(function(e) {
       e.preventDefault();
       $("#tn-calendar-table td").css("border", "1px solid rgb(3, 140, 126)");
       setMonth(yyyy, parseInt($("#tn-calendar-table").attr("data-month")) - 1);
   });
   //Set link on calendar
   $("#tn-calendar-table td").each(function() {
       $(this).click(function(e) {
           e.preventDefault();
           $("#tn-calendar-table td").css("border", "1px solid rgb(3, 140, 126)");
           if ($("#tn-active-filters-D").val() == $(this).attr("data-date")) {
               $("#tn-active-filters-D").val("");
           } else {
               $(this).css("border", "1px solid rgb(191, 27, 57)");
               $("#tn-active-filters-D").val($(this).attr("data-date"));
           }
           //Apply active filters
           useFilters();
       });
   });
   /*FILL BOOK*/
   fillBook('september');
   /**SCROLL TO POST BASED ON HASH**/
   //$("html,body").scrollTo(document.location.hash.replace("#", ""), document.location.hash.replace("#", ""));

});

// //When hash changes, scroll to correct div // oHch(function() { // $("html,body").scrollTo(document.location.hash.replace("#", ""), document.location.hash.replace("#", "")); // });