NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Hide timetable activities (plan.polsl.pl) // @namespace http://tampermonkey.net/ // @version 3.1 // @description Hides selected activities from plan.polsl.pl timetable. // @author Szymon Bartnik // @match *plan.polsl.pl/* // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js // ==/UserScript== /* jshint -W097 */ 'use strict'; // // Constants & variables var fadeOutedOpacityLevel = 0.3; var animationSpeed = "fast"; var activities = [ { key: "Wykłady", value: "rgb(123, 247, 141)", isChecked: true }, { key: "Ćwiczenia", value: "rgb(121, 249, 209)", isChecked: false }, { key: "Laborki", value: "rgb(124, 176, 246)", isChecked: false }, { key: "Projekt", value: "rgb(239, 131, 221)", isChecked: false }, { key: "Dodatkowe", value: "rgb(248, 240, 84)", isChecked: false }, ]; // // Functions function saveNewValuesToLocalStorage(){ if(typeof(Storage) == "undefined") return; localStorage.setItem("bs.fadeOutedOpacityLevel", fadeOutedOpacityLevel); for(var i in activities){ localStorage.setItem("bs." + activities[i].key, activities[i].isChecked); } } function restoreValuesFromLocalStorage(){ if(typeof(Storage) == "undefined") return; var fadeOutedOpacityLevelData = localStorage.getItem("bs.fadeOutedOpacityLevel"); if(fadeOutedOpacityLevelData !== null) fadeOutedOpacityLevel = fadeOutedOpacityLevelData; for(var i in activities){ var visibilityValue = localStorage.getItem("bs." + activities[i].key); if(visibilityValue !== null) { activities[i].isChecked = visibilityValue === "true"; } } } function fadeTo(elem, lvl){ elem.stop(); elem.fadeTo(animationSpeed, lvl); } function generateEventsForActivity(conditions){ var activitiesToHide = jq('div').filter(function() { for(var i in conditions){ if(jq(this).css('background-color') == conditions[i]) return true; } return false; }); var activitiesToShow = jq("[id^=course_]").not(activitiesToHide); fadeTo(activitiesToHide, fadeOutedOpacityLevel); // Interact lecture items behaviors activitiesToHide .on("mouseover", function() { fadeTo(activitiesToHide, 1.0); }) .on("mouseleave", function() { fadeTo(activitiesToHide, fadeOutedOpacityLevel); }); // Interact other activities items behaviors activitiesToShow .on("mouseover", function() { fadeTo(activitiesToHide, 0); }) .on("mouseleave", function() { fadeTo(activitiesToHide, fadeOutedOpacityLevel); }); } function regenerateEvents(){ var allActivities = jq("[id^=course_]"); allActivities.fadeTo(animationSpeed, 1); allActivities.unbind("mouseover"); allActivities.unbind("mouseleave"); var conditions = []; for(var i in activities){ if(activities[i].isChecked) conditions.push(activities[i].value); } generateEventsForActivity(conditions); } function getOptionsElement(activity){ var newOuterElement = jq("<li><label style='display:block' /></li>"); var activityCheckBox = jq("<input class='activityCheckBox' type='checkbox' data-activityvalue='" + activity.value + "' />"); activityCheckBox.on("change", function(){ activity.isChecked = activityCheckBox.is(':checked'); saveNewValuesToLocalStorage(); regenerateEvents(); }); activityCheckBox.appendTo(newOuterElement); activityCheckBox.attr('checked', activity.isChecked); jq("<span>" + activity.key + "</span>").appendTo(newOuterElement); return newOuterElement; } function generateOptions(){ var newOuterNode = jq("<ul style='text-align: left; display: inline-block; list-style-type: none;" + " -webkit-column-count: 2; -moz-column-count: 2; column-count: 2; margin: 0; padding: 0' />"); for(var i in activities){ var newOption = getOptionsElement(activities[i]); newOption.appendTo(newOuterNode); } return newOuterNode; } function generateUI(){ var toWrap = jq('#weekBrowser'); toWrap.css("position", "relative"); toWrap.css("display", "inline"); toWrap.css("float", "left"); toWrap.css("top", ""); toWrap.css("left", ""); var newOuterNode = jq("<div style='position: absolute; top: 67px; left: 5px' />"); newOuterNode.insertAfter(toWrap); toWrap.appendTo(newOuterNode); var newNode = jq( "<div class='wBBox' id='activitiesSelector' style='float: left; width:250px; margin-left: 5px; height: 118px; display: inline;'>" + "<div class='titleBar'>Ukrywane zajęcia</div>" + "<div class='wBParent' >" + "<div id='activitiesOptions' style='margin: 0 auto; text-align: center' />" + "<div style='text-align: center'>" + "Widoczność ukrytych " + "<input type='text' id='opacityLevel' style='width: 25px; margin-top: 5px; text-align: left' />" + " %" + "</div>" + "</div>" + "</div>"); newNode.appendTo(newOuterNode); jq("#opacityLevel").val(fadeOutedOpacityLevel); jq("#opacityLevel").on("input propertychange paste", function(){ var textBoxValue = jq("#opacityLevel").val(); var floatParsed = parseFloat(textBoxValue); if(isNaN(floatParsed)) return; fadeOutedOpacityLevel = floatParsed; saveNewValuesToLocalStorage(); regenerateEvents(); }); var genOptions = generateOptions(); genOptions.appendTo(jq('#activitiesOptions')); } // // Entry Point var jq = jQuery.noConflict(true); restoreValuesFromLocalStorage(); generateUI(); regenerateEvents();