omgtu-auto-schedule

Автоматически загружает последнее открытое расписание на сайте www.omgtu.ru

// ==UserScript==
// @name omgtu-auto-schedule
// @description Автоматически загружает последнее открытое расписание на сайте www.omgtu.ru
// @author Савкин Владимир
// @license MIT
// @version 2.2.2.6
// @include http*://www.omgtu.ru/students/temp*/
// @include http*://omgtu.ru/students/temp*/
// @namespace https://greasyfork.org/users/64313
// ==/UserScript==

(function (window, undefined) {
    var w;
    
    if (typeof unsafeWindow !== undefined) w = unsafeWindow;
    else w = window;

    if (w.self != w.top)  return;

    if (/http*:\/\/www.omgtu.ru\/students\/temp*/.test(w.location.href)) run();
    if (/http*:\/\/omgtu.ru\/students\/temp*/.test(w.location.href)) run();
    
})(window);

//Загрузка расписания по нажатию на "ФАКУЛЬТЕТЫ И ГРУППЫ"
$('#skey_g').click(function (){ run(); });

//Сохранение параметров при изменении значения поля 'Факультет'
$('#faculty_list').change(function(){
   save_values();
});

//Сохранение параметров при изменении значения поля 'Курс'
$("input[name='filter[course]']").change(function(){
    save_values();
});

//Сохранение параметров при изменении значения поля 'Группа'
$('#group_list').change(function(){
    save_values();
});

function save_values() {
    var ScheduleValue = {
        facultyText :  $('#faculty_list option:selected').text(),
        course : $("input[name='filter[course]']:checked", '#schedule').val(),
        groupText : $('#group_list option:selected').text()      
    }
    var ScheduleData = JSON.stringify(ScheduleValue);    
    localStorage.ScheduleData = ScheduleData;
    
    console.log("Сохранение");
    console.log(ScheduleValue.facultyText);
    console.log(ScheduleValue.course);
    console.log(ScheduleValue.groupText);
} 

function run() {
    if(isRealValue(localStorage.getItem('ScheduleData'))) {
        set_values(); //Выставление предыдущих выбраных значений
        var data = $('#schedule').serialize();
        update_schedule(data); //Закгруска рассписания
    }
}

function isRealValue(obj)
{
 return obj && obj !== 'null' && obj !== 'undefined';
}

function update_schedule(data) {
    var url = $('#schedule').attr("action");
    $.ajax({
        url: url,
        type: 'post',
        data: data,
        dataType: 'json',
        success: function(data) {
            if (data.success) {
                $('#weekpicker-container').show();
                $('#schedule-list').html($($.trim(data.html)).find("#schedule-list").html());
            }
        },
    });
}

function set_values() {  
    try {
         var ScheduleData = JSON.parse(localStorage.ScheduleData);
         var facultyText = ScheduleData.facultyText,
        course      = ScheduleData.course - 1,
        groupText   = ScheduleData.groupText;
        
        $("#faculty_list option").each(function() {
            if($(this).text() == facultyText)
                $(this).attr('selected', 'selected');  
        });
    
        $("input:radio[name='filter[course]']:nth("+ course +")").attr('checked',true);
   
        $("#group_list option").each(function() {
             if($(this).text() == groupText)
                 $(this).attr('selected', 'selected');            
        });
        console.log("Подстановка значений")
        console.log(facultyText);
        console.log(course + 1);
        console.log(groupText);  
    } catch (err) {
        console.log("Произошла ошибка. Пожалуйста выберите поля заного.");
    }
}

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}


function getUrlParameter(sParam, url) {
    var sPageURL = url,
        sURLVariables = sPageURL.split('&'),
        sParameterName, i;
//ToDo: Придумать как по другому игнорировать повторяющиеся атрибуты
       for (i = sURLVariables.length - 1; i > 0; i--) {
         sParameterName = sURLVariables[i].split('=');

         if (sParameterName[0] == sParam) {
            return sParameterName[1] === undefined ? true : sParameterName[1];
        }
    }
}