├── .gitignore ├── fonts ├── FontAwesome.otf ├── fontawesome-webfont.eot ├── fontawesome-webfont.ttf ├── fontawesome-webfont.woff ├── fontawesome-webfont.woff2 ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.ttf ├── glyphicons-halflings-regular.woff └── glyphicons-halflings-regular.woff2 ├── images ├── patterns │ └── 8.png ├── slider │ └── bg1.jpg └── MSCschedulizer.png ├── README.md ├── bower.json ├── asset └── js │ ├── config.example.js │ └── schedulizer.js ├── includes ├── main-nav.html ├── header.html └── footer.html ├── LICENSE.md ├── js ├── jquery.lettering.js ├── jquery.parallax.js ├── count-to.js ├── jquery.fitvids.js ├── jquery.easypiechart.min.js ├── jquery.appear.js ├── nivo-lightbox.min.js ├── jquery.migrate.js ├── jquery-migrate-1.2.1.min.js ├── jquery.textillate.js ├── jquery.easypiechart.js ├── nivo-lightbox.js ├── modernizrr.js ├── owl.carousel.min.js ├── jquery.isotope.min.js ├── script.js └── jquery.slicknav.js ├── 404.html ├── favorites.html ├── css ├── slicknav.css ├── colors │ └── jade.css └── responsive.css ├── generate.html ├── index.html ├── select-classes.html └── about.html /.gitignore: -------------------------------------------------------------------------------- 1 | .sass-cache 2 | bower_components/* 3 | asset/js/config.js -------------------------------------------------------------------------------- /fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /images/patterns/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/images/patterns/8.png -------------------------------------------------------------------------------- /images/slider/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/images/slider/bg1.jpg -------------------------------------------------------------------------------- /images/MSCschedulizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/images/MSCschedulizer.png -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kyleladd/MSCschedulizer_FrontEnd/master/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MSCschedulizer_FrontEnd 2 | ## Related Apps 3 | - https://github.com/kyleladd/MSCschedulizer_scraper 4 | - https://github.com/kyleladd/MSCschedulizer_api_swagger 5 | - https://github.com/kyleladd/MSCschedulizer_FrontEnd 6 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mscschedulizer_frontend", 3 | "version": "0.0.0", 4 | "homepage": "https://github.com/kyleladd/MSCschedulizer_FrontEnd", 5 | "authors": [ 6 | "Kyle Ladd " 7 | ], 8 | "license": "MIT", 9 | "dependencies": { 10 | "fullcalendar": "~2.6.0", 11 | "bootstrap-select": "~1.9.4" 12 | }, 13 | "private": true 14 | } 15 | -------------------------------------------------------------------------------- /asset/js/config.example.js: -------------------------------------------------------------------------------- 1 | var mscSchedulizer = mscSchedulizer === undefined ? {} : mscSchedulizer; 2 | $.extend(mscSchedulizer, { 3 | api_host:"http://schedulizer-api.kyleladd.us/v1", 4 | course_selections:"#course_selections", 5 | departments:"#departments", 6 | department_class_list:"#dept_class_list", 7 | schedules:"#schedules", 8 | colors: ["#22B548","#2293B5","#3222B5","#B58122","#B52222","#B522B0","#686967","#433050","#B3B522"], 9 | numToLoad:10, 10 | }); 11 | -------------------------------------------------------------------------------- /includes/main-nav.html: -------------------------------------------------------------------------------- 1 |
  • 2 | Home 3 |
  • 4 | 15 |
  • Select Classes
  • 16 |
  • Generate
  • 17 |
  • Favorites
  • 18 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Kyle Ladd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /js/jquery.lettering.js: -------------------------------------------------------------------------------- 1 | /*global jQuery */ 2 | /*! 3 | * Lettering.JS 0.6.1 4 | * 5 | * Copyright 2010, Dave Rupert http://daverupert.com 6 | * Released under the WTFPL license 7 | * http://sam.zoy.org/wtfpl/ 8 | * 9 | * Thanks to Paul Irish - http://paulirish.com - for the feedback. 10 | * 11 | * Date: Mon Sep 20 17:14:00 2010 -0600 12 | */ 13 | (function($){ 14 | function injector(t, splitter, klass, after) { 15 | var a = t.text().split(splitter), inject = ''; 16 | if (a.length) { 17 | $(a).each(function(i, item) { 18 | inject += ''+item+''+after; 19 | }); 20 | t.empty().append(inject); 21 | } 22 | } 23 | 24 | var methods = { 25 | init : function() { 26 | 27 | return this.each(function() { 28 | injector($(this), '', 'char', ''); 29 | }); 30 | 31 | }, 32 | 33 | words : function() { 34 | 35 | return this.each(function() { 36 | injector($(this), ' ', 'word', ' '); 37 | }); 38 | 39 | }, 40 | 41 | lines : function() { 42 | 43 | return this.each(function() { 44 | var r = "eefec303079ad17405c889e092e105b0"; 45 | // Because it's hard to split a
    tag consistently across browsers, 46 | // (*ahem* IE *ahem*), we replaces all
    instances with an md5 hash 47 | // (of the word "split"). If you're trying to use this plugin on that 48 | // md5 hash string, it will fail because you're being ridiculous. 49 | injector($(this).children("br").replaceWith(r).end(), r, 'line', ''); 50 | }); 51 | 52 | } 53 | }; 54 | 55 | $.fn.lettering = function( method ) { 56 | // Method calling logic 57 | if ( method && methods[method] ) { 58 | return methods[ method ].apply( this, [].slice.call( arguments, 1 )); 59 | } else if ( method === 'letters' || ! method ) { 60 | return methods.init.apply( this, [].slice.call( arguments, 0 ) ); // always pass an array 61 | } 62 | $.error( 'Method ' + method + ' does not exist on jQuery.lettering' ); 63 | return this; 64 | }; 65 | 66 | })(jQuery); -------------------------------------------------------------------------------- /js/jquery.parallax.js: -------------------------------------------------------------------------------- 1 | /* 2 | Plugin: jQuery Parallax 3 | Version 1.1.3 4 | Author: Ian Lunn 5 | Twitter: @IanLunn 6 | Author URL: http://www.ianlunn.co.uk/ 7 | Plugin URL: http://www.ianlunn.co.uk/plugins/jquery-parallax/ 8 | 9 | Dual licensed under the MIT and GPL licenses: 10 | http://www.opensource.org/licenses/mit-license.php 11 | http://www.gnu.org/licenses/gpl.html 12 | */ 13 | 14 | (function( $ ){ 15 | var $window = $(window); 16 | var windowHeight = $window.height(); 17 | 18 | $window.resize(function () { 19 | windowHeight = $window.height(); 20 | }); 21 | 22 | $.fn.parallax = function(xpos, speedFactor, outerHeight) { 23 | var $this = $(this); 24 | var getHeight; 25 | var firstTop; 26 | var paddingTop = 0; 27 | 28 | //get the starting position of each element to have parallax applied to it 29 | $this.each(function(){ 30 | firstTop = $this.offset().top; 31 | }); 32 | 33 | if (outerHeight) { 34 | getHeight = function(jqo) { 35 | return jqo.outerHeight(true); 36 | }; 37 | } else { 38 | getHeight = function(jqo) { 39 | return jqo.height(); 40 | }; 41 | } 42 | 43 | // setup defaults if arguments aren't specified 44 | if (arguments.length < 1 || xpos === null) xpos = "50%"; 45 | if (arguments.length < 2 || speedFactor === null) speedFactor = 0.1; 46 | if (arguments.length < 3 || outerHeight === null) outerHeight = true; 47 | 48 | // function to be called whenever the window is scrolled or resized 49 | function update(){ 50 | var pos = $window.scrollTop(); 51 | 52 | $this.each(function(){ 53 | var $element = $(this); 54 | var top = $element.offset().top; 55 | var height = getHeight($element); 56 | 57 | // Check if totally above or totally below viewport 58 | if (top + height < pos || top > pos + windowHeight) { 59 | return; 60 | } 61 | 62 | $this.css('backgroundPosition', xpos + " " + Math.round((firstTop - pos) * speedFactor) + "px"); 63 | }); 64 | } 65 | 66 | $window.bind('scroll', update).resize(update); 67 | update(); 68 | }; 69 | })(jQuery); 70 | -------------------------------------------------------------------------------- /js/count-to.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | $.fn.countTo = function (options) { 3 | options = options || {}; 4 | 5 | return $(this).each(function () { 6 | // set options for current element 7 | var settings = $.extend({}, $.fn.countTo.defaults, { 8 | from: $(this).data('from'), 9 | to: $(this).data('to'), 10 | speed: $(this).data('speed'), 11 | refreshInterval: $(this).data('refresh-interval'), 12 | decimals: $(this).data('decimals') 13 | }, options); 14 | 15 | // how many times to update the value, and how much to increment the value on each update 16 | var loops = Math.ceil(settings.speed / settings.refreshInterval), 17 | increment = (settings.to - settings.from) / loops; 18 | 19 | // references & variables that will change with each update 20 | var self = this, 21 | $self = $(this), 22 | loopCount = 0, 23 | value = settings.from, 24 | data = $self.data('countTo') || {}; 25 | 26 | $self.data('countTo', data); 27 | 28 | // if an existing interval can be found, clear it first 29 | if (data.interval) { 30 | clearInterval(data.interval); 31 | } 32 | data.interval = setInterval(updateTimer, settings.refreshInterval); 33 | 34 | // initialize the element with the starting value 35 | render(value); 36 | 37 | function updateTimer() { 38 | value += increment; 39 | loopCount++; 40 | 41 | render(value); 42 | 43 | if (typeof(settings.onUpdate) == 'function') { 44 | settings.onUpdate.call(self, value); 45 | } 46 | 47 | if (loopCount >= loops) { 48 | // remove the interval 49 | $self.removeData('countTo'); 50 | clearInterval(data.interval); 51 | value = settings.to; 52 | 53 | if (typeof(settings.onComplete) == 'function') { 54 | settings.onComplete.call(self, value); 55 | } 56 | } 57 | } 58 | 59 | function render(value) { 60 | var formattedValue = settings.formatter.call(self, value, settings); 61 | $self.html(formattedValue); 62 | } 63 | }); 64 | }; 65 | 66 | $.fn.countTo.defaults = { 67 | from: 0, // the number the element should start at 68 | to: 0, // the number the element should end at 69 | speed: 1000, // how long it should take to count between the target numbers 70 | refreshInterval: 100, // how often the element should be updated 71 | decimals: 0, // the number of decimal places to show 72 | formatter: formatter, // handler for formatting the value before rendering 73 | onUpdate: null, // callback method for every time the element is updated 74 | onComplete: null // callback method for when the element finishes updating 75 | }; 76 | 77 | function formatter(value, settings) { 78 | return value.toFixed(settings.decimals); 79 | } 80 | }(jQuery)); -------------------------------------------------------------------------------- /js/jquery.fitvids.js: -------------------------------------------------------------------------------- 1 | /*global jQuery */ 2 | /*jshint multistr:true browser:true */ 3 | /*! 4 | * FitVids 1.0.3 5 | * 6 | * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com 7 | * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ 8 | * Released under the WTFPL license - http://sam.zoy.org/wtfpl/ 9 | * 10 | * Date: Thu Sept 01 18:00:00 2011 -0500 11 | */ 12 | 13 | (function( $ ){ 14 | 15 | "use strict"; 16 | 17 | $.fn.fitVids = function( options ) { 18 | var settings = { 19 | customSelector: null 20 | }; 21 | 22 | if(!document.getElementById('fit-vids-style')) { 23 | 24 | var div = document.createElement('div'), 25 | ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0], 26 | cssStyles = '­'; 27 | 28 | div.className = 'fit-vids-style'; 29 | div.id = 'fit-vids-style'; 30 | div.style.display = 'none'; 31 | div.innerHTML = cssStyles; 32 | 33 | ref.parentNode.insertBefore(div,ref); 34 | 35 | } 36 | 37 | if ( options ) { 38 | $.extend( settings, options ); 39 | } 40 | 41 | return this.each(function(){ 42 | var selectors = [ 43 | "iframe[src*='player.vimeo.com']", 44 | "iframe[src*='youtube.com']", 45 | "iframe[src*='youtube-nocookie.com']", 46 | "iframe[src*='kickstarter.com'][src*='video.html']", 47 | "object", 48 | "embed" 49 | ]; 50 | 51 | if (settings.customSelector) { 52 | selectors.push(settings.customSelector); 53 | } 54 | 55 | var $allVideos = $(this).find(selectors.join(',')); 56 | $allVideos = $allVideos.not("object object"); // SwfObj conflict patch 57 | 58 | $allVideos.each(function(){ 59 | var $this = $(this); 60 | if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } 61 | var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), 62 | width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), 63 | aspectRatio = height / width; 64 | if(!$this.attr('id')){ 65 | var videoID = 'fitvid' + Math.floor(Math.random()*999999); 66 | $this.attr('id', videoID); 67 | } 68 | $this.wrap('
    ').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%"); 69 | $this.removeAttr('height').removeAttr('width'); 70 | }); 71 | }); 72 | }; 73 | // Works with either jQuery or Zepto 74 | })( window.jQuery || window.Zepto ); 75 | -------------------------------------------------------------------------------- /includes/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
    4 |
    5 |
    6 |
    7 | 8 | 16 | 17 |
    18 | 19 |
    20 | 21 | 26 | 27 |
    28 | 29 |
    30 | 31 |
    32 | 33 |
    34 | 35 | 36 | 37 | 38 | 39 | 77 | 78 | -------------------------------------------------------------------------------- /js/jquery.easypiechart.min.js: -------------------------------------------------------------------------------- 1 | /**! 2 | * easyPieChart 3 | * Lightweight plugin to render simple, animated and retina optimized pie charts 4 | * 5 | * @license 6 | * @author Robert Fleischmann (http://robert-fleischmann.de) 7 | * @version 2.1.5 8 | **/ 9 | !function(a,b){"object"==typeof exports?module.exports=b():"function"==typeof define&&define.amd?define([],b):a.EasyPieChart=b()}(this,function(){var a=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"undefined"!=typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},b=function(b,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:5,lineCap:"round",lineWidth:3,size:110,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(){},onStep:function(){},onStop:function(){}};if("undefined"!=typeof a)d.renderer=a;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=b,this.options=e;for(var a in d)d.hasOwnProperty(a)&&(e[a]=c&&"undefined"!=typeof c[a]?c[a]:d[a],"function"==typeof e[a]&&(e[a]=e[a].bind(this)));e.easing="string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?jQuery.easing[e.easing]:d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(b,e),this.renderer.draw(f),b.dataset&&b.dataset.percent?this.update(parseFloat(b.dataset.percent)):b.getAttribute&&b.getAttribute("data-percent")&&this.update(parseFloat(b.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};return b}); -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | MSCschedulizer 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
    67 | 68 | 69 |
    70 |
    71 | 72 | 73 |
    74 |
    75 |
    76 |
    77 |

    404

    78 |

    File not Found

    79 |

    We're sorry, but the page you were looking for doesn't exist.

    80 | 81 |
    82 |
    83 |
    84 |
    85 | 86 | 87 | 88 | 89 |
    90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /favorites.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | MSCschedulizer 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
    67 | 68 | 69 |
    70 |
    71 | 72 | 73 | 74 | 75 |
    76 |
    77 |
    78 | 79 | 80 |
    81 | 82 |
    83 | 84 |

    Favorites

    85 | 86 |
    87 |
    88 |
    89 |
    90 |
    91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 |
    99 | 100 | 101 | -------------------------------------------------------------------------------- /css/slicknav.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * SlickNav Responsive Mobile Menu v1.0.3 3 | * (c) 2015 Josh Cope 4 | * licensed under MIT 5 | */ 6 | .slicknav_btn { 7 | cursor: pointer; 8 | display: block; 9 | float: right; 10 | height: 35px; 11 | line-height: 50px; 12 | padding: 10px 0 9px; 13 | position: relative; 14 | vertical-align: middle; 15 | width: 44px; 16 | } 17 | .slicknav_btn .slicknav_icon-bar + .slicknav_icon-bar { 18 | margin-top: 0.188em; } 19 | 20 | .slicknav_menu { 21 | *zoom: 1; } 22 | .slicknav_menu .slicknav_menutxt { 23 | display: block; 24 | line-height: 1.188em; 25 | float: left; } 26 | .slicknav_menu .slicknav_icon { 27 | margin: 0.188em 0 0 0.438em; } 28 | .slicknav_menu .slicknav_no-text { 29 | margin: 0; } 30 | .slicknav_menu .slicknav_icon-bar { 31 | display: block; 32 | width: 1.125em; 33 | height: 0.125em; 34 | margin: 0 auto; 35 | -webkit-border-radius: 1px; 36 | -moz-border-radius: 1px; 37 | border-radius: 1px; 38 | -webkit-transition: all 0.2s linear; 39 | -moz-transition: all 0.2s linear; 40 | -o-transition: all 0.2s linear; 41 | transition: all 0.2s linear; 42 | } 43 | 44 | .slicknav_menu .slicknav_btn:hover .slicknav_icon-bar{ 45 | background: #ffffff; 46 | } 47 | .slicknav_menu:before { 48 | content: " "; 49 | display: table; } 50 | .slicknav_menu:after { 51 | content: " "; 52 | display: table; 53 | clear: both; } 54 | 55 | .slicknav_nav { 56 | clear: both; } 57 | .slicknav_nav ul { 58 | display: block; } 59 | .slicknav_nav li { 60 | display: block; 61 | line-height: 30px; 62 | } 63 | .slicknav_nav li:not(:first-child){ 64 | border-top: 1px solid rgba(0,0,0,0.04); 65 | } 66 | .slicknav_nav .slicknav_arrow { 67 | background: #ededed; 68 | float: right; 69 | text-align: center; 70 | width: 35px; 71 | color: #666; 72 | } 73 | .slicknav_nav .slicknav_item { 74 | cursor: pointer; } 75 | .slicknav_nav .slicknav_item a { 76 | display: inline; } 77 | .slicknav_nav .slicknav_row { 78 | display: block; } 79 | .slicknav_nav a { 80 | display: block; } 81 | .slicknav_nav .slicknav_parent-link a { 82 | display: inline; } 83 | 84 | .slicknav_brand { 85 | float: left; } 86 | 87 | .slicknav_menu { 88 | font-size: 16px; 89 | box-sizing: border-box; 90 | } 91 | .slicknav_menu ul{ 92 | background: #fff; 93 | } 94 | .slicknav_menu * { 95 | box-sizing: border-box; } 96 | .slicknav_menu .slicknav_menutxt { 97 | color: #fff; 98 | font-weight: bold; 99 | text-shadow: 0 1px 3px #000; } 100 | 101 | .slicknav_btn { 102 | border: 1px solid; 103 | border-radius: 0; 104 | margin: 16px 15px; 105 | -webkit-transition: all 0.2s linear; 106 | -moz-transition: all 0.2s linear; 107 | -o-transition: all 0.2s linear; 108 | transition: all 0.2s linear; 109 | } 110 | 111 | .slicknav_nav { 112 | color: #fff; 113 | font-size: 0.875em; 114 | list-style: outside none none; 115 | margin: 0; 116 | max-height: 350px; 117 | overflow-y: scroll; 118 | padding: 0; 119 | width: 100%; 120 | } 121 | .slicknav_nav ul { 122 | list-style: none; 123 | overflow: hidden; 124 | padding: 0; 125 | margin: 0 0 0 20px; } 126 | .slicknav_nav .slicknav_row { 127 | padding: 5px 10px; 128 | margin: 2px 5px; } 129 | .slicknav_nav a { 130 | padding: 5px 10px; 131 | margin: 2px 5px; 132 | text-decoration: none; 133 | color: #666; } 134 | .slicknav_nav .slicknav_txtnode { 135 | margin-left: 15px; } 136 | .slicknav_nav .slicknav_item a { 137 | padding: 0; 138 | margin: 0; } 139 | .slicknav_nav .slicknav_parent-link a { 140 | padding: 0; 141 | margin: 0; } 142 | 143 | .slicknav_brand { 144 | color: #fff; 145 | font-size: 18px; 146 | line-height: 30px; 147 | padding: 7px 12px; 148 | height: 44px; } 149 | -------------------------------------------------------------------------------- /js/jquery.appear.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery.appear 3 | * https://github.com/bas2k/jquery.appear/ 4 | * http://code.google.com/p/jquery-appear/ 5 | * 6 | * Copyright (c) 2009 Michael Hixson 7 | * Copyright (c) 2012 Alexander Brovikov 8 | * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) 9 | */ 10 | (function($) { 11 | $.fn.appear = function(fn, options) { 12 | 13 | var settings = $.extend({ 14 | 15 | //arbitrary data to pass to fn 16 | data: undefined, 17 | 18 | //call fn only on the first appear? 19 | one: true, 20 | 21 | // X & Y accuracy 22 | accX: 0, 23 | accY: 0 24 | 25 | }, options); 26 | 27 | return this.each(function() { 28 | 29 | var t = $(this); 30 | 31 | //whether the element is currently visible 32 | t.appeared = false; 33 | 34 | if (!fn) { 35 | 36 | //trigger the custom event 37 | t.trigger('appear', settings.data); 38 | return; 39 | } 40 | 41 | var w = $(window); 42 | 43 | //fires the appear event when appropriate 44 | var check = function() { 45 | 46 | //is the element hidden? 47 | if (!t.is(':visible')) { 48 | 49 | //it became hidden 50 | t.appeared = false; 51 | return; 52 | } 53 | 54 | //is the element inside the visible window? 55 | var a = w.scrollLeft(); 56 | var b = w.scrollTop(); 57 | var o = t.offset(); 58 | var x = o.left; 59 | var y = o.top; 60 | 61 | var ax = settings.accX; 62 | var ay = settings.accY; 63 | var th = t.height(); 64 | var wh = w.height(); 65 | var tw = t.width(); 66 | var ww = w.width(); 67 | 68 | if (y + th + ay >= b && 69 | y <= b + wh + ay && 70 | x + tw + ax >= a && 71 | x <= a + ww + ax) { 72 | 73 | //trigger the custom event 74 | if (!t.appeared) t.trigger('appear', settings.data); 75 | 76 | } else { 77 | 78 | //it scrolled out of view 79 | t.appeared = false; 80 | } 81 | }; 82 | 83 | //create a modified fn with some additional logic 84 | var modifiedFn = function() { 85 | 86 | //mark the element as visible 87 | t.appeared = true; 88 | 89 | //is this supposed to happen only once? 90 | if (settings.one) { 91 | 92 | //remove the check 93 | w.unbind('scroll', check); 94 | var i = $.inArray(check, $.fn.appear.checks); 95 | if (i >= 0) $.fn.appear.checks.splice(i, 1); 96 | } 97 | 98 | //trigger the original fn 99 | fn.apply(this, arguments); 100 | }; 101 | 102 | //bind the modified fn to the element 103 | if (settings.one) t.one('appear', settings.data, modifiedFn); 104 | else t.bind('appear', settings.data, modifiedFn); 105 | 106 | //check whenever the window scrolls 107 | w.scroll(check); 108 | 109 | //check whenever the dom changes 110 | $.fn.appear.checks.push(check); 111 | 112 | //check now 113 | (check)(); 114 | }); 115 | }; 116 | 117 | //keep a queue of appearance checks 118 | $.extend($.fn.appear, { 119 | 120 | checks: [], 121 | timeout: null, 122 | 123 | //process the queue 124 | checkAll: function() { 125 | var length = $.fn.appear.checks.length; 126 | if (length > 0) while (length--) ($.fn.appear.checks[length])(); 127 | }, 128 | 129 | //check the queue asynchronously 130 | run: function() { 131 | if ($.fn.appear.timeout) clearTimeout($.fn.appear.timeout); 132 | $.fn.appear.timeout = setTimeout($.fn.appear.checkAll, 20); 133 | } 134 | }); 135 | 136 | //run checks when these methods are called 137 | $.each(['append', 'prepend', 'after', 'before', 'attr', 138 | 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 139 | 'remove', 'css', 'show', 'hide'], function(i, n) { 140 | var old = $.fn[n]; 141 | if (old) { 142 | $.fn[n] = function() { 143 | var r = old.apply(this, arguments); 144 | $.fn.appear.run(); 145 | return r; 146 | } 147 | } 148 | }); 149 | 150 | })(jQuery); -------------------------------------------------------------------------------- /includes/footer.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 4 | 24 | 25 | 26 |
    27 |
    28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /generate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | MSCschedulizer 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
    72 | 73 | 74 |
    75 |
    76 | 77 | 78 | 79 | 80 |
    81 |
    82 |
    83 |
    84 | 85 |
    86 | 87 |

    Schedules

    88 |
    Loading Schedules...
    89 |
    90 |
    91 |
    92 |
    93 |
    94 | 95 | 96 | 97 | 98 | 99 |
    100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | MSCschedulizer 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
    67 | 68 | 69 |
    70 |
    71 | 72 | 73 | 74 | 75 |
    76 | 77 | 114 | 115 |
    116 | 117 | 118 | 119 | 120 | 121 |
    122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /select-classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | MSCschedulizer 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
    71 | 72 | 73 |
    74 |
    75 | 76 | 77 | 78 | 79 |
    80 |
    81 |
    82 | 83 | 124 |
    125 |
    126 |
    127 | 128 | 129 | 130 | 131 | 132 |
    133 | 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /js/nivo-lightbox.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Nivo Lightbox v1.0 3 | * http://dev7studios.com/nivo-lightbox 4 | * 5 | * Copyright 2013, Dev7studios 6 | * Free to use and abuse under the MIT license. 7 | * http://www.opensource.org/licenses/mit-license.php 8 | */ 9 | 10 | (function(e,t,n,r){function o(t,n){this.el=t;this.$el=e(this.el);this.options=e.extend({},s,n);this._defaults=s;this._name=i;this.init()}var i="nivoLightbox",s={effect:"fade",theme:"default",keyboardNav:true,onInit:function(){},beforeShowLightbox:function(){},afterShowLightbox:function(e){},beforeHideLightbox:function(){},afterHideLightbox:function(){},onPrev:function(e){},onNext:function(e){},errorMessage:"The requested content cannot be loaded. Please try again later."};o.prototype={init:function(){var t=this;this.$el.on("click",function(e){e.preventDefault();t.showLightbox()});if(this.options.keyboardNav){e("body").off("keyup").on("keyup",function(n){var r=n.keyCode?n.keyCode:n.which;if(r==27)t.destructLightbox();if(r==37)e(".nivo-lightbox-prev").trigger("click");if(r==39)e(".nivo-lightbox-next").trigger("click")})}this.options.onInit.call(this)},showLightbox:function(){var t=this;this.options.beforeShowLightbox.call(this);var n=this.constructLightbox();if(!n)return;var r=n.find(".nivo-lightbox-content");if(!r)return;var i=this.$el;e("body").addClass("nivo-lightbox-body-effect-"+this.options.effect);this.processContent(r,i);if(this.$el.attr("data-lightbox-gallery")){var t=this,s=e('[data-lightbox-gallery="'+this.$el.attr("data-lightbox-gallery")+'"]');e(".nivo-lightbox-nav").show();e(".nivo-lightbox-prev").off("click").on("click",function(n){n.preventDefault();var o=s.index(i);i=s.eq(o-1);if(!e(i).length)i=s.last();t.processContent(r,i);t.options.onPrev.call(this,[i])});e(".nivo-lightbox-next").off("click").on("click",function(n){n.preventDefault();var o=s.index(i);i=s.eq(o+1);if(!e(i).length)i=s.first();t.processContent(r,i);t.options.onNext.call(this,[i])})}setTimeout(function(){n.addClass("nivo-lightbox-open");t.options.afterShowLightbox.call(this,[n])},1)},processContent:function(n,r){var i=this;var s=r.attr("href");n.html("").addClass("nivo-lightbox-loading");if(this.isHidpi()&&r.attr("data-lightbox-hidpi")){s=r.attr("data-lightbox-hidpi")}if(s.match(/\.(jpeg|jpg|gif|png)$/)!=null){var o=e("",{src:s});o.one("load",function(){var r=e('
    ');r.append(o);n.html(r).removeClass("nivo-lightbox-loading");r.css({"line-height":e(".nivo-lightbox-content").height()+"px",height:e(".nivo-lightbox-content").height()+"px"});e(t).resize(function(){r.css({"line-height":e(".nivo-lightbox-content").height()+"px",height:e(".nivo-lightbox-content").height()+"px"})})}).each(function(){if(this.complete)e(this).load()});o.error(function(){var t=e('

    '+i.options.errorMessage+"

    ");n.html(t).removeClass("nivo-lightbox-loading")})}else if(video=s.match(/(youtube|youtu|vimeo)\.(com|be)\/(watch\?v=(\w+)|(\w+))/)){var u="",a="nivo-lightbox-video";if(video[1]=="youtube"){u="http://www.youtube.com/v/"+video[4];a="nivo-lightbox-youtube"}if(video[1]=="youtu"){u="http://www.youtube.com/v/"+video[3];a="nivo-lightbox-youtube"}if(video[1]=="vimeo"){u="http://player.vimeo.com/video/"+video[3];a="nivo-lightbox-vimeo"}if(u){var f=e("