summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--forums/settings.py4
-rw-r--r--static/website/css/main.css45
-rw-r--r--static/website/js/custom.js1
-rw-r--r--static/website/slick/ajax-loader.gifbin0 -> 4178 bytes
-rw-r--r--static/website/slick/fonts/slick.eotbin0 -> 2048 bytes
-rw-r--r--static/website/slick/fonts/slick.svg14
-rw-r--r--static/website/slick/fonts/slick.ttfbin0 -> 1892 bytes
-rw-r--r--static/website/slick/fonts/slick.woffbin0 -> 1380 bytes
-rw-r--r--static/website/slick/slick.css47
-rw-r--r--static/website/slick/slick.js1668
-rw-r--r--static/website/slick/slick.min.js1
-rw-r--r--static/website/slick/slick.scss223
-rw-r--r--static/website/templates/base.html5
-rw-r--r--static/website/templates/get-question.html6
-rw-r--r--static/website/templates/index.html178
-rw-r--r--static/website/templates/notify.html12
-rw-r--r--website/models.py11
-rw-r--r--website/templatetags/count_tags.py12
-rw-r--r--website/templatetags/notify.py3
-rw-r--r--website/views.py102
20 files changed, 2281 insertions, 51 deletions
diff --git a/forums/settings.py b/forums/settings.py
index 2d6d388..df8ec84 100644
--- a/forums/settings.py
+++ b/forums/settings.py
@@ -187,5 +187,5 @@ AUTHENTICATION_BACKENDS = ( 'drupal_auth.backends.DrupalAuthBackend', )
DATABASE_ROUTERS = ['drupal_auth.routers.DrupalAuthRouter']
TEMPLATE_CONTEXT_PROCESSORS += ('website.context_processors.admin_processor', )
-COMPRESS_ENABLED = True
-HTML_MINIFY = True
+COMPRESS_ENABLED = False
+HTML_MINIFY = False
diff --git a/static/website/css/main.css b/static/website/css/main.css
index d68d693..61c411c 100644
--- a/static/website/css/main.css
+++ b/static/website/css/main.css
@@ -12,17 +12,29 @@ hr {
.navbar-default {
margin-bottom: 0;
}
-.thumbnail .caption {
- padding: 2px 3px;
+.carousel, .slick-list {
+ height: 100px;
+ margin-right: -2px;
}
-.thumbnail .caption h3 {
- font-size: 0.8em;
- margin-top: 0;
- white-space: nowrap;
- overflow: hidden;
+.carousel .item {
+ border: 1px solid #333333;
+ position: relative;
+}
+.carousel .thumb {
+ text-align: center;
+ height: 75px;
+}
+.carousel .descp {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
}
-.thumbnail .caption p{
- margin: 0;
+#filter-container {
+ background: #f5f5f5;
+ padding: 15px;
+}
+#filter-form {
+ margin-bottom: 0;
}
/* override nicEditor */
#questionInstance {
@@ -317,13 +329,10 @@ table .title a {
padding: 2px 7px;
background: #f5f5f5;
}
-/* expansion */
-.col-lg-2 {
- position: static;
-}
-.expander {
- position: absolute;
- left: 0;
- width: 100%;
- height: 300px;
+/* carousel styles */
+.slick-next:before,
+.slick-prev:before,
+.slick-next:after,
+.slick-prev:after {
+ color: #a26dc8;
}
diff --git a/static/website/js/custom.js b/static/website/js/custom.js
index 467ba9d..49b4053 100644
--- a/static/website/js/custom.js
+++ b/static/website/js/custom.js
@@ -66,6 +66,7 @@ $(document).ready(function() {
});
});
+
$(document).ajaxStart(function() {
$("#ajax-loader").show();
});
diff --git a/static/website/slick/ajax-loader.gif b/static/website/slick/ajax-loader.gif
new file mode 100644
index 0000000..e0e6e97
--- /dev/null
+++ b/static/website/slick/ajax-loader.gif
Binary files differ
diff --git a/static/website/slick/fonts/slick.eot b/static/website/slick/fonts/slick.eot
new file mode 100644
index 0000000..2cbab9c
--- /dev/null
+++ b/static/website/slick/fonts/slick.eot
Binary files differ
diff --git a/static/website/slick/fonts/slick.svg b/static/website/slick/fonts/slick.svg
new file mode 100644
index 0000000..b36a66a
--- /dev/null
+++ b/static/website/slick/fonts/slick.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by Fontastic.me</metadata>
+<defs>
+<font id="slick" horiz-adv-x="512">
+<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
+<missing-glyph horiz-adv-x="512" />
+
+<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
+</font></defs></svg>
diff --git a/static/website/slick/fonts/slick.ttf b/static/website/slick/fonts/slick.ttf
new file mode 100644
index 0000000..9d03461
--- /dev/null
+++ b/static/website/slick/fonts/slick.ttf
Binary files differ
diff --git a/static/website/slick/fonts/slick.woff b/static/website/slick/fonts/slick.woff
new file mode 100644
index 0000000..8ee9972
--- /dev/null
+++ b/static/website/slick/fonts/slick.woff
Binary files differ
diff --git a/static/website/slick/slick.css b/static/website/slick/slick.css
new file mode 100644
index 0000000..8c09f9e
--- /dev/null
+++ b/static/website/slick/slick.css
@@ -0,0 +1,47 @@
+/* Slider */
+.slick-slider { position: relative; display: block; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -ms-touch-action: none; touch-action: none; -webkit-tap-highlight-color: transparent; }
+
+.slick-list { position: relative; overflow: hidden; display: block; margin: 0; padding: 0; }
+.slick-list:focus { outline: none; }
+.slick-loading .slick-list { background: white url(./ajax-loader.gif) center center no-repeat; }
+.slick-list.dragging { cursor: pointer; cursor: hand; }
+
+.slick-slider .slick-list, .slick-track, .slick-slide, .slick-slide img { -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); }
+
+.slick-track { position: relative; left: 0; top: 0; display: block; zoom: 1; }
+.slick-track:before, .slick-track:after { content: ""; display: table; }
+.slick-track:after { clear: both; }
+.slick-loading .slick-track { visibility: hidden; }
+
+.slick-slide { float: left; height: 100%; min-height: 1px; display: none; }
+.slick-slide img { display: block; }
+.slick-slide img.slick-loading { background: white url(./ajax-loader.gif) center center no-repeat; padding-bottom: 100%; }
+.slick-slide.dragging img { pointer-events: none; }
+.slick-initialized .slick-slide { display: block; }
+.slick-loading .slick-slide { visibility: hidden; }
+.slick-vertical .slick-slide { display: block; height: auto; border: 1px solid transparent; }
+
+/* Icons */
+@font-face { font-family: "slick"; src: url("./fonts/slick.eot"); src: url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg"); font-weight: normal; font-style: normal; }
+/* Arrows */
+.slick-prev, .slick-next { position: absolute; display: block; height: 20px; width: 20px; line-height: 0; font-size: 0; cursor: pointer; background: transparent; color: transparent; top: 50%; margin-top: -10px; padding: 0; border: none; outline: none; }
+.slick-prev:focus, .slick-next:focus { outline: none; }
+.slick-prev.slick-disabled:before, .slick-next.slick-disabled:before { opacity: 0.25; }
+
+.slick-prev:before, .slick-next:before { font-family: "slick"; font-size: 20px; line-height: 1; color: white; opacity: 0.85; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
+
+.slick-prev { left: -25px; }
+.slick-prev:before { content: '\2190'; }
+
+.slick-next { right: -25px; }
+.slick-next:before { content: '\2192'; }
+
+/* Dots */
+.slick-slider { margin-bottom: 30px; }
+
+.slick-dots { position: absolute; bottom: -45px; list-style: none; display: block; text-align: center; padding: 0px; width: 100%; }
+.slick-dots li { position: relative; display: inline-block; height: 20px; width: 20px; margin: 0px 5px; padding: 0px; cursor: pointer; }
+.slick-dots li button { border: 0; background: transparent; display: block; height: 20px; width: 20px; outline: none; line-height: 0; font-size: 0; color: transparent; padding: 5px; cursor: pointer; outline: none; }
+.slick-dots li button:focus { outline: none; }
+.slick-dots li button:before { position: absolute; top: 0; left: 0; content: '\2022'; width: 20px; height: 20px; font-family: "slick"; font-size: 6px; line-height: 20px; text-align: center; color: black; opacity: 0.25; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
+.slick-dots li.slick-active button:before { opacity: 0.75; } \ No newline at end of file
diff --git a/static/website/slick/slick.js b/static/website/slick/slick.js
new file mode 100644
index 0000000..ceb40f0
--- /dev/null
+++ b/static/website/slick/slick.js
@@ -0,0 +1,1668 @@
+/*
+ _ _ _ _
+ ___| (_) ___| | __ (_)___
+/ __| | |/ __| |/ / | / __|
+\__ \ | | (__| < _ | \__ \
+|___/_|_|\___|_|\_(_)/ |___/
+ |__/
+
+ Author: Ken Wheeler
+ Website: http://kenwheeler.github.io
+ Docs: http://kenwheeler.github.io/slick
+ Repo: http://github.com/kenwheeler/slick
+ Issues: http://github.com/kenwheeler/slick/issues
+
+ */
+
+/* global window, document, define, jQuery, setInterval, clearInterval */
+
+(function(factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else {
+ factory(jQuery);
+ }
+
+}(function($) {
+ 'use strict';
+ var Slick = window.Slick || {};
+
+ Slick = (function() {
+
+ var instanceUid = 0;
+
+ function Slick(element, settings) {
+
+ var _ = this,
+ responsiveSettings, breakpoint;
+
+ _.defaults = {
+ accessibility: true,
+ arrows: true,
+ autoplay: false,
+ autoplaySpeed: 3000,
+ centerMode: false,
+ centerPadding: '50px',
+ cssEase: 'ease',
+ customPaging: function(slider, i) {
+ return '<button type="button">' + (i + 1) + '</button>';
+ },
+ dots: false,
+ draggable: true,
+ easing: 'linear',
+ fade: false,
+ infinite: true,
+ lazyLoad: 'ondemand',
+ onBeforeChange: null,
+ onAfterChange: null,
+ onInit: null,
+ onReInit: null,
+ pauseOnHover: true,
+ responsive: null,
+ slide: 'div',
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ speed: 300,
+ swipe: true,
+ touchMove: true,
+ touchThreshold: 5,
+ vertical: false
+ };
+
+ _.initials = {
+ animating: false,
+ autoPlayTimer: null,
+ currentSlide: 0,
+ currentLeft: null,
+ direction: 1,
+ $dots: null,
+ listWidth: null,
+ listHeight: null,
+ loadIndex: 0,
+ $nextArrow: null,
+ $prevArrow: null,
+ slideCount: null,
+ slideWidth: null,
+ $slideTrack: null,
+ $slides: null,
+ sliding: false,
+ slideOffset: 0,
+ swipeLeft: null,
+ $list: null,
+ touchObject: {},
+ transformsEnabled: false
+ };
+
+ $.extend(_, _.initials);
+
+ _.activeBreakpoint = null;
+ _.animType = null;
+ _.animProp = null;
+ _.breakpoints = [];
+ _.breakpointSettings = [];
+ _.cssTransitions = false;
+ _.paused = false;
+ _.positionProp = null;
+ _.$slider = $(element);
+ _.$slidesCache = null;
+ _.transformType = null;
+ _.transitionType = null;
+ _.windowWidth = 0;
+ _.windowTimer = null;
+
+ _.options = $.extend({}, _.defaults, settings);
+
+ _.originalSettings = _.options;
+ responsiveSettings = _.options.responsive || null;
+
+ if (responsiveSettings && responsiveSettings.length > -1) {
+ for (breakpoint in responsiveSettings) {
+ if (responsiveSettings.hasOwnProperty(breakpoint)) {
+ _.breakpoints.push(responsiveSettings[
+ breakpoint].breakpoint);
+ _.breakpointSettings[responsiveSettings[
+ breakpoint].breakpoint] =
+ responsiveSettings[breakpoint].settings;
+ }
+ }
+ _.breakpoints.sort(function(a, b) {
+ return b - a;
+ });
+ }
+
+ _.autoPlay = $.proxy(_.autoPlay, _);
+ _.autoPlayClear = $.proxy(_.autoPlayClear, _);
+ _.changeSlide = $.proxy(_.changeSlide, _);
+ _.setPosition = $.proxy(_.setPosition, _);
+ _.swipeHandler = $.proxy(_.swipeHandler, _);
+ _.dragHandler = $.proxy(_.dragHandler, _);
+ _.keyHandler = $.proxy(_.keyHandler, _);
+ _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
+
+ _.instanceUid = instanceUid++;
+
+ _.init();
+
+ }
+
+ return Slick;
+
+ }());
+
+ Slick.prototype.addSlide = function(markup, index, addBefore) {
+
+ var _ = this;
+
+ if (typeof(index) === 'boolean') {
+ addBefore = index;
+ index = null;
+ } else if (index < 0 || (index >= _.slideCount)) {
+ return false;
+ }
+
+ _.unload();
+
+ if (typeof(index) === 'number') {
+ if (index === 0 && _.$slides.length === 0) {
+ $(markup).appendTo(_.$slideTrack);
+ } else if (addBefore) {
+ $(markup).insertBefore(_.$slides.eq(index));
+ } else {
+ $(markup).insertAfter(_.$slides.eq(index));
+ }
+ } else {
+ if (addBefore === true) {
+ $(markup).prependTo(_.$slideTrack);
+ } else {
+ $(markup).appendTo(_.$slideTrack);
+ }
+ }
+
+ _.$slides = _.$slideTrack.children(this.options.slide);
+
+ _.$slideTrack.children(this.options.slide).remove();
+
+ _.$slideTrack.append(_.$slides);
+
+ _.$slidesCache = _.$slides;
+
+ _.reinit();
+
+ };
+
+ Slick.prototype.animateSlide = function(targetLeft,
+ callback) {
+
+ var animProps = {}, _ = this;
+
+ if (_.transformsEnabled === false) {
+ if (_.options.vertical === false) {
+ _.$slideTrack.animate({
+ left: targetLeft
+ }, _.options.speed, _.options.easing, callback);
+ } else {
+ _.$slideTrack.animate({
+ top: targetLeft
+ }, _.options.speed, _.options.easing, callback);
+ }
+
+ } else {
+
+ if (_.cssTransitions === false) {
+
+ $({
+ animStart: _.currentLeft
+ }).animate({
+ animStart: targetLeft
+ }, {
+ duration: _.options.speed,
+ easing: _.options.easing,
+ step: function(now) {
+ if (_.options.vertical === false) {
+ animProps[_.animType] = 'translate(' +
+ now + 'px, 0px)';
+ _.$slideTrack.css(animProps);
+ } else {
+ animProps[_.animType] = 'translate(0px,' +
+ now + 'px,0px)';
+ _.$slideTrack.css(animProps);
+ }
+ },
+ complete: function() {
+ if (callback) {
+ callback.call();
+ }
+ }
+ });
+
+ } else {
+
+ _.applyTransition();
+
+ if (_.options.vertical === false) {
+ animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
+ } else {
+ animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
+ }
+ _.$slideTrack.css(animProps);
+
+ if (callback) {
+ setTimeout(function() {
+
+ _.disableTransition();
+
+ callback.call();
+ }, _.options.speed);
+ }
+
+ }
+
+ }
+
+ };
+
+ Slick.prototype.applyTransition = function(slide) {
+
+ var _ = this,
+ transition = {};
+
+ if (_.options.fade === false) {
+ transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
+ } else {
+ transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
+ }
+
+ if (_.options.fade === false) {
+ _.$slideTrack.css(transition);
+ } else {
+ _.$slides.eq(slide).css(transition);
+ }
+
+ };
+
+ Slick.prototype.autoPlay = function() {
+
+ var _ = this;
+
+ if (_.autoPlayTimer) {
+ clearInterval(_.autoPlayTimer);
+ }
+
+ if (_.slideCount > _.options.slidesToShow && _.paused !== true) {
+ _.autoPlayTimer = setInterval(_.autoPlayIterator,
+ _.options.autoplaySpeed);
+ }
+
+ };
+
+ Slick.prototype.autoPlayClear = function() {
+
+ var _ = this;
+
+ if (_.autoPlayTimer) {
+ clearInterval(_.autoPlayTimer);
+ }
+
+ };
+
+ Slick.prototype.autoPlayIterator = function() {
+
+ var _ = this;
+
+ if (_.options.infinite === false) {
+
+ if (_.direction === 1) {
+
+ if ((_.currentSlide + 1) === _.slideCount -
+ 1) {
+ _.direction = 0;
+ }
+
+ _.slideHandler(_.currentSlide + _.options
+ .slidesToScroll);
+
+ } else {
+
+ if ((_.currentSlide - 1 === 0)) {
+
+ _.direction = 1;
+
+ }
+
+ _.slideHandler(_.currentSlide - _.options
+ .slidesToScroll);
+
+ }
+
+ } else {
+
+ _.slideHandler(_.currentSlide + _.options.slidesToScroll);
+
+ }
+
+ };
+
+ Slick.prototype.buildArrows = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$prevArrow = $(
+ '<button type="button" class="slick-prev">Previous</button>').appendTo(
+ _.$slider);
+ _.$nextArrow = $(
+ '<button type="button" class="slick-next">Next</button>').appendTo(
+ _.$slider);
+
+ if (_.options.infinite !== true) {
+ _.$prevArrow.addClass('slick-disabled');
+ }
+
+ }
+
+ };
+
+ Slick.prototype.buildDots = function() {
+
+ var _ = this,
+ i, dotString;
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+ dotString = '<ul class="slick-dots">';
+
+ for (i = 0; i <= _.getDotCount(); i += 1) {
+ dotString += '<li>' + _.options.customPaging.call(this, _, i) + '</li>';
+ }
+
+ dotString += '</ul>';
+
+ _.$dots = $(dotString).appendTo(
+ _.$slider);
+
+ _.$dots.find('li').first().addClass(
+ 'slick-active');
+
+ }
+
+ };
+
+ Slick.prototype.buildOut = function() {
+
+ var _ = this;
+
+ _.$slides = _.$slider.children(_.options.slide +
+ ':not(.slick-cloned)').addClass(
+ 'slick-slide');
+ _.slideCount = _.$slides.length;
+ _.$slidesCache = _.$slides;
+
+ _.$slider.addClass('slick-slider');
+
+ _.$slideTrack = (_.slideCount === 0) ?
+ $('<div class="slick-track"/>').appendTo(_.$slider) :
+ _.$slides.wrapAll('<div class="slick-track"/>').parent();
+
+ _.$list = _.$slideTrack.wrap(
+ '<div class="slick-list"/>').parent();
+ _.$slideTrack.css('opacity', 0);
+
+ if (_.options.centerMode === true) {
+ _.options.infinite = true;
+ _.options.slidesToScroll = 1;
+ if (_.options.slidesToShow % 2 === 0) {
+ _.options.slidesToShow = 3;
+ }
+ }
+
+ $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
+
+ _.setupInfinite();
+
+ _.buildArrows();
+
+ _.buildDots();
+
+ if (_.options.accessibility === true) {
+ _.$list.prop('tabIndex', 0);
+ }
+
+ _.setSlideClasses(0);
+
+ if (_.options.draggable === true) {
+ _.$list.addClass('draggable');
+ }
+
+ };
+
+ Slick.prototype.checkResponsive = function() {
+
+ var _ = this,
+ breakpoint, targetBreakpoint;
+
+ if (_.originalSettings.responsive && _.originalSettings
+ .responsive.length > -1 && _.originalSettings.responsive !== null) {
+
+ targetBreakpoint = null;
+
+ for (breakpoint in _.breakpoints) {
+ if (_.breakpoints.hasOwnProperty(breakpoint)) {
+ if ($(window).width() < _.breakpoints[
+ breakpoint]) {
+ targetBreakpoint = _.breakpoints[
+ breakpoint];
+ }
+ }
+ }
+
+ if (targetBreakpoint !== null) {
+ if (_.activeBreakpoint !== null) {
+ if (targetBreakpoint !== _.activeBreakpoint) {
+ _.activeBreakpoint =
+ targetBreakpoint;
+ _.options = $.extend({}, _.defaults,
+ _.breakpointSettings[
+ targetBreakpoint]);
+ _.refresh();
+ }
+ } else {
+ _.activeBreakpoint = targetBreakpoint;
+ _.options = $.extend({}, _.defaults,
+ _.breakpointSettings[
+ targetBreakpoint]);
+ _.refresh();
+ }
+ } else {
+ if (_.activeBreakpoint !== null) {
+ _.activeBreakpoint = null;
+ _.options = $.extend({}, _.defaults,
+ _.originalSettings);
+ _.refresh();
+ }
+ }
+
+ }
+
+ };
+
+ Slick.prototype.changeSlide = function(event) {
+
+ var _ = this;
+
+ switch (event.data.message) {
+
+ case 'previous':
+ _.slideHandler(_.currentSlide - _.options
+ .slidesToScroll);
+ break;
+
+ case 'next':
+ _.slideHandler(_.currentSlide + _.options
+ .slidesToScroll);
+ break;
+
+ case 'index':
+ _.slideHandler($(event.target).parent().index() * _.options.slidesToScroll);
+ break;
+
+ default:
+ return false;
+ }
+
+ };
+
+ Slick.prototype.destroy = function() {
+
+ var _ = this;
+
+ _.autoPlayClear();
+
+ _.touchObject = {};
+
+ $('.slick-cloned', _.$slider).remove();
+ if (_.$dots) {
+ _.$dots.remove();
+ }
+ if (_.$prevArrow) {
+ _.$prevArrow.remove();
+ _.$nextArrow.remove();
+ }
+ _.$slides.unwrap().unwrap();
+ _.$slides.removeClass(
+ 'slick-slide slick-active slick-visible').removeAttr('style');
+ _.$slider.removeClass('slick-slider');
+ _.$slider.removeClass('slick-initialized');
+
+ _.$list.off('.slick');
+ $(window).off('.slick-' + _.instanceUid);
+ };
+
+ Slick.prototype.disableTransition = function(slide) {
+
+ var _ = this,
+ transition = {};
+
+ transition[_.transitionType] = "";
+
+ if (_.options.fade === false) {
+ _.$slideTrack.css(transition);
+ } else {
+ _.$slides.eq(slide).css(transition);
+ }
+
+ };
+
+ Slick.prototype.fadeSlide = function(slideIndex, callback) {
+
+ var _ = this;
+
+ if (_.cssTransitions === false) {
+
+ _.$slides.eq(slideIndex).css({
+ zIndex: 1000
+ });
+
+ _.$slides.eq(slideIndex).animate({
+ opacity: 1
+ }, _.options.speed, _.options.easing, callback);
+
+ } else {
+
+ _.applyTransition(slideIndex);
+
+ _.$slides.eq(slideIndex).css({
+ opacity: 1,
+ zIndex: 1000
+ });
+
+ if (callback) {
+ setTimeout(function() {
+
+ _.disableTransition(slideIndex);
+
+ callback.call();
+ }, _.options.speed);
+ }
+
+ }
+
+ };
+
+ Slick.prototype.filterSlides = function(filter) {
+
+ var _ = this;
+
+ if (filter !== null) {
+
+ _.unload();
+
+ _.$slideTrack.children(this.options.slide).remove();
+
+ _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
+
+ _.reinit();
+
+ }
+
+ };
+
+ Slick.prototype.getDotCount = function() {
+
+ var _ = this,
+ breaker = 0,
+ dotCounter = 0,
+ dotCount = 0,
+ dotLimit;
+
+ dotLimit = _.options.infinite === true ? _.slideCount + _.options.slidesToShow - _.options.slidesToScroll : _.slideCount;
+
+ while (breaker < dotLimit) {
+ dotCount++;
+ dotCounter += _.options.slidesToScroll;
+ breaker = dotCounter + _.options.slidesToShow;
+ }
+
+ return dotCount;
+
+ };
+
+ Slick.prototype.getLeft = function(slideIndex) {
+
+ var _ = this,
+ targetLeft;
+
+ _.slideOffset = 0;
+
+ if (_.options.infinite === true) {
+ if (_.slideCount > _.options.slidesToShow) {
+ _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
+ }
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
+ if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
+ _.slideOffset = ((_.slideCount % _.options.slidesToShow) * _.slideWidth) * -1;
+ }
+ }
+ } else {
+ if (_.slideCount % _.options.slidesToShow !== 0) {
+ if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
+ _.slideOffset = ((_.slideCount % _.options.slidesToShow) * _.slideWidth);
+ }
+ }
+ }
+
+ if (_.options.centerMode === true) {
+ _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
+ }
+
+ if (_.options.vertical === false) {
+ targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
+ } else {
+ _.listHeight = _.$list.height();
+ if (_.options.infinite === true) {
+ targetLeft = ((slideIndex * _.listHeight) * -1) - _.listHeight;
+ } else {
+ targetLeft = ((slideIndex * _.listHeight) * -1);
+ }
+ }
+
+ return targetLeft;
+
+ };
+
+ Slick.prototype.init = function() {
+
+ var _ = this;
+
+ if (!$(_.$slider).hasClass('slick-initialized')) {
+
+ $(_.$slider).addClass('slick-initialized');
+ _.buildOut();
+ _.setProps();
+ _.startLoad();
+ _.loadSlider();
+ _.initializeEvents();
+ _.checkResponsive();
+ }
+
+ if (_.options.onInit !== null) {
+ _.options.onInit.call(this, _);
+ }
+
+ };
+
+ Slick.prototype.initArrowEvents = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+ _.$prevArrow.on('click.slick', {
+ message: 'previous'
+ }, _.changeSlide);
+ _.$nextArrow.on('click.slick', {
+ message: 'next'
+ }, _.changeSlide);
+ }
+
+ };
+
+ Slick.prototype.initDotEvents = function() {
+
+ var _ = this;
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+ $('li', _.$dots).on('click.slick', {
+ message: 'index'
+ }, _.changeSlide);
+ }
+
+ };
+
+ Slick.prototype.initializeEvents = function() {
+
+ var _ = this;
+
+ _.initArrowEvents();
+
+ _.initDotEvents();
+
+ _.$list.on('touchstart.slick mousedown.slick', {
+ action: 'start'
+ }, _.swipeHandler);
+ _.$list.on('touchmove.slick mousemove.slick', {
+ action: 'move'
+ }, _.swipeHandler);
+ _.$list.on('touchend.slick mouseup.slick', {
+ action: 'end'
+ }, _.swipeHandler);
+ _.$list.on('touchcancel.slick mouseleave.slick', {
+ action: 'end'
+ }, _.swipeHandler);
+
+ if (_.options.pauseOnHover === true && _.options.autoplay === true) {
+ _.$list.on('mouseenter.slick', _.autoPlayClear);
+ _.$list.on('mouseleave.slick', _.autoPlay);
+ }
+
+ _.$list.on('keydown.slick', _.keyHandler);
+
+ $(window).on('orientationchange.slick.slick-' + _.instanceUid, function() {
+ _.checkResponsive();
+ _.setPosition();
+ });
+
+ $(window).on('resize.slick.slick-' + _.instanceUid, function() {
+ if ($(window).width !== _.windowWidth) {
+ clearTimeout(_.windowDelay);
+ _.windowDelay = window.setTimeout(function() {
+ _.windowWidth = $(window).width();
+ _.checkResponsive();
+ _.setPosition();
+ }, 50);
+ }
+ });
+
+ $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
+
+ };
+
+ Slick.prototype.initUI = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$prevArrow.show();
+ _.$nextArrow.show();
+
+ }
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$dots.show();
+
+ }
+
+ if (_.options.autoplay === true) {
+
+ _.autoPlay();
+
+ }
+
+ };
+
+ Slick.prototype.keyHandler = function(event) {
+
+ var _ = this;
+
+ if (event.keyCode === 37) {
+ _.changeSlide({
+ data: {
+ message: 'previous'
+ }
+ });
+ } else if (event.keyCode === 39) {
+ _.changeSlide({
+ data: {
+ message: 'next'
+ }
+ });
+ }
+
+ };
+
+ Slick.prototype.lazyLoad = function() {
+
+ var _ = this,
+ loadRange, cloneRange, rangeStart, rangeEnd;
+
+ if (_.options.centerMode === true) {
+ rangeStart = _.options.slidesToShow + _.currentSlide - 1;
+ rangeEnd = rangeStart + _.options.slidesToShow + 2;
+ } else {
+ rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
+ rangeEnd = rangeStart + _.options.slidesToShow;
+ }
+
+ loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
+
+ $('img[data-lazy]', loadRange).not('[src]').each(function() {
+ $(this).attr('src', $(this).attr('data-lazy')).removeClass('slick-loading');
+ });
+
+ if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
+ cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
+ $('img[data-lazy]', cloneRange).not('[src]').each(function() {
+ $(this).attr('src', $(this).attr('data-lazy')).removeClass('slick-loading');
+ });
+ } else if (_.currentSlide === 0) {
+ cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
+ $('img[data-lazy]', cloneRange).not('[src]').each(function() {
+ $(this).attr('src', $(this).attr('data-lazy')).removeClass('slick-loading');
+ });
+ }
+
+ };
+
+ Slick.prototype.loadSlider = function() {
+
+ var _ = this;
+
+ _.setPosition();
+
+ _.$slideTrack.css({
+ opacity: 1
+ });
+
+ _.$slider.removeClass('slick-loading');
+
+ _.initUI();
+
+ if (_.options.lazyLoad === 'progressive') {
+ _.progressiveLazyLoad();
+ }
+
+ };
+
+ Slick.prototype.postSlide = function(index) {
+
+ var _ = this;
+
+ if (_.options.onAfterChange !== null && index !== _.currentSlide) {
+ _.options.onAfterChange.call(this, _, index);
+ }
+
+ _.animating = false;
+
+ _.setPosition();
+
+ _.swipeLeft = null;
+
+ if (_.options.autoplay === true && _.paused === false) {
+ _.autoPlay();
+ }
+
+ _.setSlideClasses(_.currentSlide);
+
+ };
+
+ Slick.prototype.progressiveLazyLoad = function() {
+
+ var _ = this,
+ imgCount, targetImage;
+
+ imgCount = $('img[data-lazy]').not('[src]').length;
+
+ if (imgCount > 0) {
+ targetImage = $($('img[data-lazy]', _.$slider).not('[src]').get(0));
+ targetImage.attr('src', targetImage.attr('data-lazy')).removeClass('slick-loading').load(function() {
+ _.progressiveLazyLoad();
+ });
+ }
+
+ };
+
+ Slick.prototype.refresh = function() {
+
+ var _ = this;
+
+ _.destroy();
+
+ $.extend(_, _.initials);
+
+ _.init();
+
+ };
+
+ Slick.prototype.reinit = function() {
+
+ var _ = this;
+
+ _.$slides = $(_.options.slide +
+ ':not(.slick-cloned)', _.$slideTrack).addClass(
+ 'slick-slide');
+
+ _.slideCount = _.$slides.length;
+
+ if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
+ _.currentSlide = _.currentSlide - _.options.slidesToScroll;
+ }
+
+ _.setProps();
+
+ _.setupInfinite();
+
+ _.buildArrows();
+
+ _.updateArrows();
+
+ _.initArrowEvents();
+
+ _.buildDots();
+
+ _.updateDots();
+
+ _.initDotEvents();
+
+ _.setSlideClasses(0);
+
+ _.setPosition();
+
+ if (_.options.onReInit !== null) {
+ _.options.onReInit.call(this, _);
+ }
+
+ };
+
+ Slick.prototype.removeSlide = function(index, removeBefore) {
+
+ var _ = this;
+
+ if (typeof(index) === 'boolean') {
+ removeBefore = index;
+ index = removeBefore === true ? 0 : _.slideCount - 1;
+ } else {
+ index = removeBefore === true ? --index : index;
+ }
+
+ if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
+ return false;
+ }
+
+ _.unload();
+
+ _.$slideTrack.children(this.options.slide).eq(index).remove();
+
+ _.$slides = _.$slideTrack.children(this.options.slide);
+
+ _.$slideTrack.children(this.options.slide).remove();
+
+ _.$slideTrack.append(_.$slides);
+
+ _.$slidesCache = _.$slides;
+
+ _.reinit();
+
+ };
+
+ Slick.prototype.setCSS = function(position) {
+
+ var _ = this,
+ positionProps = {}, x, y;
+
+ x = _.positionProp == 'left' ? position + 'px' : '0px';
+ y = _.positionProp == 'top' ? position + 'px' : '0px';
+
+ positionProps[_.positionProp] = position;
+
+ if (_.transformsEnabled === false) {
+ _.$slideTrack.css(positionProps);
+ } else {
+ positionProps = {};
+ if (_.cssTransitions === false) {
+ positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
+ _.$slideTrack.css(positionProps);
+ } else {
+ positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
+ _.$slideTrack.css(positionProps);
+ }
+ }
+
+ };
+
+ Slick.prototype.setDimensions = function() {
+
+ var _ = this;
+
+ if (_.options.centerMode === true) {
+ _.$list.find('.slick-slide').width(_.slideWidth);
+ } else {
+ _.$list.find('.slick-slide').width(_.slideWidth);
+ }
+
+
+ if (_.options.vertical === false) {
+ _.$slideTrack.width(Math.ceil((_.slideWidth * _
+ .$slider.find('.slick-slide').length)));
+ if (_.options.centerMode === true) {
+ _.$list.css({
+ padding: ('0px ' + _.options.centerPadding)
+ });
+ }
+ } else {
+ _.$list.height(_.$slides.first().outerHeight());
+ _.$slideTrack.height(Math.ceil((_.listHeight * _
+ .$slider.find('.slick-slide').length)));
+ if (_.options.centerMode === true) {
+ _.$list.css({
+ padding: (_.options.centerPadding + ' 0px')
+ });
+ }
+ }
+
+ };
+
+ Slick.prototype.setFade = function() {
+
+ var _ = this,
+ targetLeft;
+
+ _.$slides.each(function(index, element) {
+ targetLeft = (_.slideWidth * index) * -1;
+ $(element).css({
+ position: 'relative',
+ left: targetLeft,
+ top: 0,
+ zIndex: 800,
+ opacity: 0
+ });
+ });
+
+ _.$slides.eq(_.currentSlide).css({
+ zIndex: 900,
+ opacity: 1
+ });
+
+ };
+
+ Slick.prototype.setPosition = function() {
+
+ var _ = this;
+
+ _.setValues();
+ _.setDimensions();
+
+ if (_.options.fade === false) {
+ _.setCSS(_.getLeft(_.currentSlide));
+ } else {
+ _.setFade();
+ }
+
+ };
+
+ Slick.prototype.setProps = function() {
+
+ var _ = this;
+
+ _.positionProp = _.options.vertical === true ? 'top' : 'left';
+
+ if (_.positionProp === 'top') {
+ _.$slider.addClass('slick-vertical');
+ } else {
+ _.$slider.removeClass('slick-vertical');
+ }
+
+ if (document.body.style.WebkitTransition !== undefined ||
+ document.body.style.MozTransition !== undefined ||
+ document.body.style.msTransition !== undefined) {
+ _.cssTransitions = true;
+ }
+
+ if (document.body.style.MozTransform !== undefined) {
+ _.animType = 'MozTransform';
+ _.transformType = "-moz-transform";
+ _.transitionType = 'MozTransition';
+ }
+ if (document.body.style.webkitTransform !== undefined) {
+ _.animType = 'webkitTransform';
+ _.transformType = "-webkit-transform";
+ _.transitionType = 'webkitTransition';
+ }
+ if (document.body.style.msTransform !== undefined) {
+ _.animType = 'transform';
+ _.transformType = "transform";
+ _.transitionType = 'transition';
+ }
+
+ _.transformsEnabled = (_.animType !== null);
+
+ };
+
+ Slick.prototype.setValues = function() {
+
+ var _ = this;
+
+ _.listWidth = _.$list.width();
+ _.listHeight = _.$list.height();
+ _.slideWidth = Math.ceil(_.listWidth / _.options
+ .slidesToShow);
+
+ };
+
+ Slick.prototype.setSlideClasses = function(index) {
+
+ var _ = this,
+ centerOffset, allSlides, indexOffset;
+
+ _.$slider.find('.slick-slide').removeClass('slick-active').removeClass('slick-center');
+ allSlides = _.$slider.find('.slick-slide');
+
+ if (_.options.centerMode === true) {
+
+ centerOffset = Math.floor(_.options.slidesToShow / 2);
+
+ if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
+ _.$slides.slice(index - centerOffset, index + centerOffset + 1).addClass('slick-active');
+ } else {
+ indexOffset = _.options.slidesToShow + index;
+ allSlides.slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2).addClass('slick-active');
+ }
+
+ if (index === 0) {
+ allSlides.eq(allSlides.length - 1 - _.options.slidesToShow).addClass('slick-center');
+ } else if (index === _.slideCount - 1) {
+ allSlides.eq(_.options.slidesToShow).addClass('slick-center');
+ }
+
+ _.$slides.eq(index).addClass('slick-center');
+
+ } else {
+
+ if (index > 0 && index < (_.slideCount - _.options.slidesToShow)) {
+ _.$slides.slice(index, index + _.options.slidesToShow).addClass('slick-active');
+ } else {
+ indexOffset = _.options.slidesToShow + index;
+ allSlides.slice(indexOffset, indexOffset + _.options.slidesToShow).addClass('slick-active');
+ }
+
+ }
+
+ if (_.options.lazyLoad === 'ondemand') {
+ _.lazyLoad();
+ }
+
+ };
+
+ Slick.prototype.setupInfinite = function() {
+
+ var _ = this,
+ i, slideIndex, infiniteCount;
+
+ if (_.options.fade === true || _.options.vertical === true) {
+ _.options.slidesToShow = 1;
+ _.options.slidesToScroll = 1;
+ _.options.centerMode = false;
+ }
+
+ if (_.options.infinite === true && _.options.fade === false) {
+
+ slideIndex = null;
+
+ if (_.slideCount > _.options.slidesToShow) {
+
+ if (_.options.centerMode === true) {
+ infiniteCount = _.options.slidesToShow + 1;
+ } else {
+ infiniteCount = _.options.slidesToShow;
+ }
+
+ for (i = _.slideCount; i > (_.slideCount -
+ infiniteCount); i -= 1) {
+ slideIndex = i - 1;
+ $(_.$slides[slideIndex]).clone().attr('id', '').prependTo(
+ _.$slideTrack).addClass('slick-cloned');
+ }
+ for (i = 0; i < infiniteCount; i += 1) {
+ slideIndex = i;
+ $(_.$slides[slideIndex]).clone().attr('id', '').appendTo(
+ _.$slideTrack).addClass('slick-cloned');
+ }
+ _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
+ $(this).attr('id', '');
+ });
+
+ }
+
+ }
+
+ };
+
+ Slick.prototype.slideHandler = function(index) {
+
+ var targetSlide, animSlide, slideLeft, unevenOffset, targetLeft = null,
+ _ = this;
+
+ if (_.animating === true) {
+ return false;
+ }
+
+ targetSlide = index;
+ targetLeft = _.getLeft(targetSlide);
+ slideLeft = _.getLeft(_.currentSlide);
+
+ unevenOffset = _.slideCount % _.options.slidesToScroll !== 0 ? _.options.slidesToScroll : 0;
+
+ if (_.options.infinite === false && (index < 0 || index > (_.slideCount - _.options.slidesToShow + unevenOffset))) {
+ targetSlide = _.currentSlide;
+ _.animateSlide(slideLeft, function() {
+ _.postSlide(targetSlide);
+ });
+ return false;
+ }
+
+ if (_.options.autoplay === true) {
+ clearInterval(_.autoPlayTimer);
+ }
+
+ _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
+
+ if (targetSlide < 0) {
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
+ animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
+ } else {
+ animSlide = _.slideCount - _.options.slidesToScroll;
+ }
+ } else if (targetSlide > (_.slideCount - 1)) {
+ animSlide = 0;
+ } else {
+ animSlide = targetSlide;
+ }
+
+ _.animating = true;
+
+ if (_.options.onBeforeChange !== null && index !== _.currentSlide) {
+ _.options.onBeforeChange.call(this, _, _.currentSlide);
+ }
+
+ _.currentSlide = animSlide;
+ _.updateDots();
+ _.updateArrows();
+
+ if (_.options.fade === true) {
+ _.fadeSlide(animSlide, function() {
+ _.postSlide(animSlide);
+ });
+ return false;
+ }
+
+ _.animateSlide(targetLeft, function() {
+ _.postSlide(animSlide);
+ });
+
+ };
+
+ Slick.prototype.startLoad = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$prevArrow.hide();
+ _.$nextArrow.hide();
+
+ }
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$dots.hide();
+
+ }
+
+ _.$slider.addClass('slick-loading');
+
+ };
+
+ Slick.prototype.swipeDirection = function() {
+
+ var xDist, yDist, r, swipeAngle, _ = this;
+
+ xDist = _.touchObject.startX - _.touchObject.curX;
+ yDist = _.touchObject.startY - _.touchObject.curY;
+ r = Math.atan2(yDist, xDist);
+
+ swipeAngle = Math.round(r * 180 / Math.PI);
+ if (swipeAngle < 0) {
+ swipeAngle = 360 - Math.abs(swipeAngle);
+ }
+
+ if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
+ return 'left';
+ }
+ if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
+ return 'left';
+ }
+ if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
+ return 'right';
+ }
+
+ return 'vertical';
+
+ };
+
+ Slick.prototype.swipeEnd = function(event) {
+
+ var _ = this;
+
+ _.$list.removeClass('dragging');
+
+ if (_.touchObject.curX === undefined) {
+ return false;
+ }
+
+ if (_.touchObject.swipeLength >= _.touchObject.minSwipe) {
+ $(event.target).on('click.slick', function(event) {
+ event.stopImmediatePropagation();
+ event.stopPropagation();
+ event.preventDefault();
+ $(event.target).off('click.slick');
+ });
+
+ switch (_.swipeDirection()) {
+ case 'left':
+ _.slideHandler(_.currentSlide + _.options.slidesToScroll);
+ _.touchObject = {};
+ break;
+
+ case 'right':
+ _.slideHandler(_.currentSlide - _.options.slidesToScroll);
+ _.touchObject = {};
+ break;
+ }
+ } else {
+ if(_.touchObject.startX !== _.touchObject.curX) {
+ _.slideHandler(_.currentSlide);
+ _.touchObject = {};
+ }
+ }
+
+ };
+
+ Slick.prototype.swipeHandler = function(event) {
+
+ var _ = this;
+
+ if ('ontouchend' in document && _.options.swipe === false) {
+ return false;
+ } else if (_.options.draggable === false && !event.originalEvent.touches) {
+ return false;
+ }
+
+ _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
+ event.originalEvent.touches.length : 1;
+
+ _.touchObject.minSwipe = _.listWidth / _.options
+ .touchThreshold;
+
+ switch (event.data.action) {
+
+ case 'start':
+ _.swipeStart(event);
+ break;
+
+ case 'move':
+ _.swipeMove(event);
+ break;
+
+ case 'end':
+ _.swipeEnd(event);
+ break;
+
+ }
+
+ };
+
+ Slick.prototype.swipeMove = function(event) {
+
+ var _ = this,
+ curLeft, swipeDirection, positionOffset, touches;
+
+ touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
+
+ curLeft = _.getLeft(_.currentSlide);
+
+ if (!_.$list.hasClass('dragging') || touches && touches.length !== 1) {
+ return false;
+ }
+
+ _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
+ _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
+
+ _.touchObject.swipeLength = Math.round(Math.sqrt(
+ Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
+
+ swipeDirection = _.swipeDirection();
+
+ if (swipeDirection === 'vertical') {
+ return false;
+ }
+
+ if (event.originalEvent !== undefined) {
+ event.preventDefault();
+ }
+
+ positionOffset = _.touchObject.curX > _.touchObject.startX ? 1 : -1;
+
+ if (_.options.vertical === false) {
+ _.swipeLeft = curLeft + _.touchObject.swipeLength * positionOffset;
+ } else {
+ _.swipeLeft = curLeft + (_.touchObject
+ .swipeLength * (_.listHeight / _.listWidth)) * positionOffset;
+ }
+
+ if (_.options.fade === true || _.options.touchMove === false) {
+ return false;
+ }
+
+ if (_.animating === true) {
+ _.swipeLeft = null;
+ return false;
+ }
+
+ _.setCSS(_.swipeLeft);
+
+ };
+
+ Slick.prototype.swipeStart = function(event) {
+
+ var _ = this,
+ touches;
+
+ if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
+ _.touchObject = {};
+ return false;
+ }
+
+ if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
+ touches = event.originalEvent.touches[0];
+ }
+
+ _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
+ _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
+
+ _.$list.addClass('dragging');
+
+ };
+
+ Slick.prototype.unfilterSlides = function() {
+
+ var _ = this;
+
+ if (_.$slidesCache !== null) {
+
+ _.unload();
+
+ _.$slideTrack.children(this.options.slide).remove();
+
+ _.$slidesCache.appendTo(_.$slideTrack);
+
+ _.reinit();
+
+ }
+
+ };
+
+ Slick.prototype.unload = function() {
+
+ var _ = this;
+
+ $('.slick-cloned', _.$slider).remove();
+ if (_.$dots) {
+ _.$dots.remove();
+ }
+ if (_.$prevArrow) {
+ _.$prevArrow.remove();
+ _.$nextArrow.remove();
+ }
+ _.$slides.removeClass(
+ 'slick-slide slick-active slick-visible').removeAttr('style');
+
+ };
+
+ Slick.prototype.updateArrows = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.options.infinite !==
+ true && _.slideCount > _.options.slidesToShow) {
+ _.$prevArrow.removeClass('slick-disabled');
+ _.$nextArrow.removeClass('slick-disabled');
+ if (_.currentSlide === 0) {
+ _.$prevArrow.addClass('slick-disabled');
+ _.$nextArrow.removeClass('slick-disabled');
+ } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
+ _.$nextArrow.addClass('slick-disabled');
+ _.$prevArrow.removeClass('slick-disabled');
+ }
+ }
+
+ };
+
+ Slick.prototype.updateDots = function() {
+
+ var _ = this;
+
+ if (_.$dots !== null) {
+
+ _.$dots.find('li').removeClass('slick-active');
+ _.$dots.find('li').eq(_.currentSlide / _.options.slidesToScroll).addClass(
+ 'slick-active');
+
+ }
+
+ };
+
+ $.fn.slick = function(options) {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick = new Slick(element, options);
+
+ });
+ };
+
+ $.fn.slickAdd = function(slide, slideIndex, addBefore) {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.addSlide(slide, slideIndex, addBefore);
+
+ });
+ };
+
+ $.fn.slickFilter = function(filter) {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.filterSlides(filter);
+
+ });
+ };
+
+ $.fn.slickGoTo = function(slide) {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.slideHandler(slide);
+
+ });
+ };
+
+ $.fn.slickNext = function() {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.changeSlide({
+ data: {
+ message: 'next'
+ }
+ });
+
+ });
+ };
+
+ $.fn.slickPause = function() {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.autoPlayClear();
+ element.slick.paused = true;
+
+ });
+ };
+
+ $.fn.slickPlay = function() {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.paused = false;
+ element.slick.autoPlay();
+
+ });
+ };
+
+ $.fn.slickPrev = function() {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.changeSlide({
+ data: {
+ message: 'previous'
+ }
+ });
+
+ });
+ };
+
+ $.fn.slickRemove = function(slideIndex, removeBefore) {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.removeSlide(slideIndex, removeBefore);
+
+ });
+ };
+
+ $.fn.slickSetOption = function(option, value, refresh) {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.options[option] = value;
+
+ if (refresh === true) {
+ element.slick.unload();
+ element.slick.reinit();
+ }
+
+ });
+ };
+
+ $.fn.slickUnfilter = function() {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.unfilterSlides();
+
+ });
+ };
+
+ $.fn.unslick = function() {
+ var _ = this;
+ return _.each(function(index, element) {
+
+ element.slick.destroy();
+
+ });
+ };
+
+})); \ No newline at end of file
diff --git a/static/website/slick/slick.min.js b/static/website/slick/slick.min.js
new file mode 100644
index 0000000..f9b13f4
--- /dev/null
+++ b/static/website/slick/slick.min.js
@@ -0,0 +1 @@
+!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,g,e=this;if(e.defaults={accessibility:!0,arrows:!0,autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(a,b){return'<button type="button">'+(b+1)+"</button>"},dots:!1,draggable:!0,easing:"linear",fade:!1,infinite:!0,lazyLoad:"ondemand",onBeforeChange:null,onAfterChange:null,onInit:null,onReInit:null,pauseOnHover:!0,responsive:null,slide:"div",slidesToShow:1,slidesToScroll:1,speed:300,swipe:!0,touchMove:!0,touchThreshold:5,vertical:!1},e.initials={animating:!1,autoPlayTimer:null,currentSlide:0,currentLeft:null,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.paused=!1,e.positionProp=null,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.windowWidth=0,e.windowTimer=null,e.options=a.extend({},e.defaults,d),e.originalSettings=e.options,f=e.options.responsive||null,f&&f.length>-1){for(g in f)f.hasOwnProperty(g)&&(e.breakpoints.push(f[g].breakpoint),e.breakpointSettings[f[g].breakpoint]=f[g].settings);e.breakpoints.sort(function(a,b){return b-a})}e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.changeSlide=a.proxy(e.changeSlide,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.instanceUid=b++,e.init()}var b=0;return c}(),b.prototype.addSlide=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).remove(),e.$slideTrack.append(e.$slides),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateSlide=function(b,c){var d={},e=this;e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px,0px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}}):(e.applyTransition(),d[e.animType]=e.options.vertical===!1?"translate3d("+b+"px, 0px, 0px)":"translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.applyTransition=function(a){var b=this,c={};c[b.transitionType]=b.options.fade===!1?b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:"opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer),a.slideCount>a.options.slidesToShow&&a.paused!==!0&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this;a.options.infinite===!1?1===a.direction?(a.currentSlide+1===a.slideCount-1&&(a.direction=0),a.slideHandler(a.currentSlide+a.options.slidesToScroll)):(0===a.currentSlide-1&&(a.direction=1),a.slideHandler(a.currentSlide-a.options.slidesToScroll)):a.slideHandler(a.currentSlide+a.options.slidesToScroll)},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow=a('<button type="button" class="slick-prev">Previous</button>').appendTo(b.$slider),b.$nextArrow=a('<button type="button" class="slick-next">Next</button>').appendTo(b.$slider),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled"))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(d='<ul class="slick-dots">',c=0;c<=b.getDotCount();c+=1)d+="<li>"+b.options.customPaging.call(this,b,c)+"</li>";d+="</ul>",b.$dots=a(d).appendTo(b.$slider),b.$dots.find("li").first().addClass("slick-active")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slidesCache=b.$slides,b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),b.options.centerMode===!0&&(b.options.infinite=!0,b.options.slidesToScroll=1,0===b.options.slidesToShow%2&&(b.options.slidesToShow=3)),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.options.accessibility===!0&&b.$list.prop("tabIndex",0),b.setSlideClasses(0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.checkResponsive=function(){var c,d,b=this;if(b.originalSettings.responsive&&b.originalSettings.responsive.length>-1&&null!==b.originalSettings.responsive){d=null;for(c in b.breakpoints)b.breakpoints.hasOwnProperty(c)&&a(window).width()<b.breakpoints[c]&&(d=b.breakpoints[c]);null!==d?null!==b.activeBreakpoint?d!==b.activeBreakpoint&&(b.activeBreakpoint=d,b.options=a.extend({},b.defaults,b.breakpointSettings[d]),b.refresh()):(b.activeBreakpoint=d,b.options=a.extend({},b.defaults,b.breakpointSettings[d]),b.refresh()):null!==b.activeBreakpoint&&(b.activeBreakpoint=null,b.options=a.extend({},b.defaults,b.originalSettings),b.refresh())}},b.prototype.changeSlide=function(b){var c=this;switch(b.data.message){case"previous":c.slideHandler(c.currentSlide-c.options.slidesToScroll);break;case"next":c.slideHandler(c.currentSlide+c.options.slidesToScroll);break;case"index":c.slideHandler(a(b.target).parent().index()*c.options.slidesToScroll);break;default:return!1}},b.prototype.destroy=function(){var b=this;b.autoPlayClear(),b.touchObject={},a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&(b.$prevArrow.remove(),b.$nextArrow.remove()),b.$slides.unwrap().unwrap(),b.$slides.removeClass("slick-slide slick-active slick-visible").removeAttr("style"),b.$slider.removeClass("slick-slider"),b.$slider.removeClass("slick-initialized"),b.$list.off(".slick"),a(window).off(".slick-"+b.instanceUid)},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:1e3}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:1e3}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.filterSlides=function(a){var b=this;null!==a&&(b.unload(),b.$slideTrack.children(this.options.slide).remove(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.getDotCount=function(){var e,a=this,b=0,c=0,d=0;for(e=a.options.infinite===!0?a.slideCount+a.options.slidesToShow-a.options.slidesToScroll:a.slideCount;e>b;)d++,c+=a.options.slidesToScroll,b=c+a.options.slidesToShow;return d},b.prototype.getLeft=function(a){var c,b=this;return b.slideOffset=0,b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=-1*b.slideWidth*b.options.slidesToShow),0!==b.slideCount%b.options.slidesToScroll&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(b.slideOffset=-1*b.slideCount%b.options.slidesToShow*b.slideWidth)):0!==b.slideCount%b.options.slidesToShow&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.slideCount%b.options.slidesToShow*b.slideWidth),b.options.centerMode===!0&&(b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth),b.options.vertical===!1?c=-1*a*b.slideWidth+b.slideOffset:(b.listHeight=b.$list.height(),c=b.options.infinite===!0?-1*a*b.listHeight-b.listHeight:-1*a*b.listHeight),c},b.prototype.init=function(){var b=this;a(b.$slider).hasClass("slick-initialized")||(a(b.$slider).addClass("slick-initialized"),b.buildOut(),b.setProps(),b.startLoad(),b.loadSlider(),b.initializeEvents(),b.checkResponsive()),null!==b.options.onInit&&b.options.onInit.call(this,b)},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide)},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.options.pauseOnHover===!0&&b.options.autoplay===!0&&(b.$list.on("mouseenter.slick",b.autoPlayClear),b.$list.on("mouseleave.slick",b.autoPlay)),b.$list.on("keydown.slick",b.keyHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,function(){b.checkResponsive(),b.setPosition()}),a(window).on("resize.slick.slick-"+b.instanceUid,function(){a(window).width!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.setPosition()},50))}),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show(),a.options.autoplay===!0&&a.autoPlay()},b.prototype.keyHandler=function(a){var b=this;37===a.keyCode?b.changeSlide({data:{message:"previous"}}):39===a.keyCode&&b.changeSlide({data:{message:"next"}})},b.prototype.lazyLoad=function(){var c,d,e,f,b=this;b.options.centerMode===!0?(e=b.options.slidesToShow+b.currentSlide-1,f=e+b.options.slidesToShow+2):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=e+b.options.slidesToShow),c=b.$slider.find(".slick-slide").slice(e,f),a("img[data-lazy]",c).not("[src]").each(function(){a(this).attr("src",a(this).attr("data-lazy")).removeClass("slick-loading")}),b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),a("img[data-lazy]",d).not("[src]").each(function(){a(this).attr("src",a(this).attr("data-lazy")).removeClass("slick-loading")})):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),a("img[data-lazy]",d).not("[src]").each(function(){a(this).attr("src",a(this).attr("data-lazy")).removeClass("slick-loading")}))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.postSlide=function(a){var b=this;null!==b.options.onAfterChange&&a!==b.currentSlide&&b.options.onAfterChange.call(this,b,a),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay===!0&&b.paused===!1&&b.autoPlay(),b.setSlideClasses(b.currentSlide)},b.prototype.progressiveLazyLoad=function(){var c,d,b=this;c=a("img[data-lazy]").not("[src]").length,c>0&&(d=a(a("img[data-lazy]",b.$slider).not("[src]").get(0)),d.attr("src",d.attr("data-lazy")).removeClass("slick-loading").load(function(){b.progressiveLazyLoad()}))},b.prototype.refresh=function(){var b=this;b.destroy(),a.extend(b,b.initials),b.init()},b.prototype.reinit=function(){var b=this;b.$slides=a(b.options.slide+":not(.slick-cloned)",b.$slideTrack).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.setSlideClasses(0),b.setPosition(),null!==b.options.onReInit&&b.options.onReInit.call(this,b)},b.prototype.removeSlide=function(a,b){var c=this;return"boolean"==typeof a?(b=a,a=b===!0?0:c.slideCount-1):a=b===!0?--a:a,c.slideCount<1||0>a||a>c.slideCount-1?!1:(c.unload(),c.$slideTrack.children(this.options.slide).eq(a).remove(),c.$slides=c.$slideTrack.children(this.options.slide),c.$slideTrack.children(this.options.slide).remove(),c.$slideTrack.append(c.$slides),c.$slidesCache=c.$slides,c.reinit(),void 0)},b.prototype.setCSS=function(a){var d,e,b=this,c={};d="left"==b.positionProp?a+"px":"0px",e="top"==b.positionProp?a+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.centerMode===!0?a.$list.find(".slick-slide").width(a.slideWidth):a.$list.find(".slick-slide").width(a.slideWidth),a.options.vertical===!1?(a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slider.find(".slick-slide").length)),a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding})):(a.$list.height(a.$slides.first().outerHeight()),a.$slideTrack.height(Math.ceil(a.listHeight*a.$slider.find(".slick-slide").length)),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"}))},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=-1*b.slideWidth*d,a(e).css({position:"relative",left:c,top:0,zIndex:800,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:900,opacity:1})},b.prototype.setPosition=function(){var a=this;a.setValues(),a.setDimensions(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade()},b.prototype.setProps=function(){var a=this;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==document.body.style.WebkitTransition||void 0!==document.body.style.MozTransition||void 0!==document.body.style.msTransition)&&(a.cssTransitions=!0),void 0!==document.body.style.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition"),void 0!==document.body.style.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition"),void 0!==document.body.style.msTransform&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=null!==a.animType},b.prototype.setValues=function(){var a=this;a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow)},b.prototype.setSlideClasses=function(a){var c,d,e,b=this;b.$slider.find(".slick-slide").removeClass("slick-active").removeClass("slick-center"),d=b.$slider.find(".slick-slide"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active"):(e=b.options.slidesToShow+a,d.slice(e-c+1,e+c+2).addClass("slick-active")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center"),b.$slides.eq(a).addClass("slick-center")):a>0&&a<b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active"):(e=b.options.slidesToShow+a,d.slice(e,e+b.options.slidesToShow).addClass("slick-active")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if((b.options.fade===!0||b.options.vertical===!0)&&(b.options.slidesToShow=1,b.options.slidesToScroll=1,b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone().attr("id","").prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone().attr("id","").appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.slideHandler=function(a){var b,c,d,e,f=null,g=this;return g.animating===!0?!1:(b=a,f=g.getLeft(b),d=g.getLeft(g.currentSlide),e=0!==g.slideCount%g.options.slidesToScroll?g.options.slidesToScroll:0,g.options.infinite===!1&&(0>a||a>g.slideCount-g.options.slidesToShow+e)?(b=g.currentSlide,g.animateSlide(d,function(){g.postSlide(b)}),!1):(g.options.autoplay===!0&&clearInterval(g.autoPlayTimer),g.currentLeft=null===g.swipeLeft?d:g.swipeLeft,c=0>b?0!==g.slideCount%g.options.slidesToScroll?g.slideCount-g.slideCount%g.options.slidesToScroll:g.slideCount-g.options.slidesToScroll:b>g.slideCount-1?0:b,g.animating=!0,null!==g.options.onBeforeChange&&a!==g.currentSlide&&g.options.onBeforeChange.call(this,g,g.currentSlide),g.currentSlide=c,g.updateDots(),g.updateArrows(),g.options.fade===!0?(g.fadeSlide(c,function(){g.postSlide(c)}),!1):(g.animateSlide(f,function(){g.postSlide(c)}),void 0)))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?"left":360>=d&&d>=315?"left":d>=135&&225>=d?"right":"vertical"},b.prototype.swipeEnd=function(b){var c=this;if(c.$list.removeClass("dragging"),void 0===c.touchObject.curX)return!1;if(c.touchObject.swipeLength>=c.touchObject.minSwipe)switch(a(b.target).on("click.slick",function(b){b.stopImmediatePropagation(),b.stopPropagation(),b.preventDefault(),a(b.target).off("click.slick")}),c.swipeDirection()){case"left":c.slideHandler(c.currentSlide+c.options.slidesToScroll),c.touchObject={};break;case"right":c.slideHandler(c.currentSlide-c.options.slidesToScroll),c.touchObject={}}else c.touchObject.startX!==c.touchObject.curX&&(c.slideHandler(c.currentSlide),c.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if("ontouchend"in document&&b.options.swipe===!1)return!1;if(b.options.draggable===!1&&!a.originalEvent.touches)return!1;switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var c,d,e,f,b=this;return f=void 0!==a.originalEvent?a.originalEvent.touches:null,c=b.getLeft(b.currentSlide),!b.$list.hasClass("dragging")||f&&1!==f.length?!1:(b.touchObject.curX=void 0!==f?f[0].pageX:a.clientX,b.touchObject.curY=void 0!==f?f[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),d=b.swipeDirection(),"vertical"===d?!1:(void 0!==a.originalEvent&&a.preventDefault(),e=b.touchObject.curX>b.touchObject.startX?1:-1,b.swipeLeft=b.options.vertical===!1?c+b.touchObject.swipeLength*e:c+b.touchObject.swipeLength*(b.listHeight/b.listWidth)*e,b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):(b.setCSS(b.swipeLeft),void 0)))},b.prototype.swipeStart=function(a){var c,b=this;return 1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,b.$list.addClass("dragging"),void 0)},b.prototype.unfilterSlides=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).remove(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&(b.$prevArrow.remove(),b.$nextArrow.remove()),b.$slides.removeClass("slick-slide slick-active slick-visible").removeAttr("style")},b.prototype.updateArrows=function(){var a=this;a.options.arrows===!0&&a.options.infinite!==!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.removeClass("slick-disabled"),a.$nextArrow.removeClass("slick-disabled"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled"),a.$nextArrow.removeClass("slick-disabled")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&(a.$nextArrow.addClass("slick-disabled"),a.$prevArrow.removeClass("slick-disabled")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active"),a.$dots.find("li").eq(a.currentSlide/a.options.slidesToScroll).addClass("slick-active"))},a.fn.slick=function(a){var c=this;return c.each(function(c,d){d.slick=new b(d,a)})},a.fn.slickAdd=function(a,b,c){var d=this;return d.each(function(d,e){e.slick.addSlide(a,b,c)})},a.fn.slickFilter=function(a){var b=this;return b.each(function(b,c){c.slick.filterSlides(a)})},a.fn.slickGoTo=function(a){var b=this;return b.each(function(b,c){c.slick.slideHandler(a)})},a.fn.slickNext=function(){var a=this;return a.each(function(a,b){b.slick.changeSlide({data:{message:"next"}})})},a.fn.slickPause=function(){var a=this;return a.each(function(a,b){b.slick.autoPlayClear(),b.slick.paused=!0})},a.fn.slickPlay=function(){var a=this;return a.each(function(a,b){b.slick.paused=!1,b.slick.autoPlay()})},a.fn.slickPrev=function(){var a=this;return a.each(function(a,b){b.slick.changeSlide({data:{message:"previous"}})})},a.fn.slickRemove=function(a,b){var c=this;return c.each(function(c,d){d.slick.removeSlide(a,b)})},a.fn.slickSetOption=function(a,b,c){var d=this;return d.each(function(d,e){e.slick.options[a]=b,c===!0&&(e.slick.unload(),e.slick.reinit())})},a.fn.slickUnfilter=function(){var a=this;return a.each(function(a,b){b.slick.unfilterSlides()})},a.fn.unslick=function(){var a=this;return a.each(function(a,b){b.slick.destroy()})}}); \ No newline at end of file
diff --git a/static/website/slick/slick.scss b/static/website/slick/slick.scss
new file mode 100644
index 0000000..fe1eb2d
--- /dev/null
+++ b/static/website/slick/slick.scss
@@ -0,0 +1,223 @@
+/* Slider */
+
+.slick-slider {
+ position: relative;
+ display: block;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -ms-touch-action: none;
+ touch-action: none;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+.slick-list {
+ position: relative;
+ overflow: hidden;
+ display: block;
+ margin: 0;
+ padding: 0;
+
+ &:focus {
+ outline: none;
+ }
+
+ .slick-loading & {
+ background: #fff url(./ajax-loader.gif) center center no-repeat;
+ }
+
+ &.dragging {
+ cursor: pointer;
+ cursor: hand;
+ }
+}
+.slick-slider .slick-list,
+.slick-track,
+.slick-slide,
+.slick-slide img {
+ -webkit-transform: translate3d(0, 0, 0);
+ -moz-transform: translate3d(0, 0, 0);
+ -ms-transform: translate3d(0, 0, 0);
+ -o-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.slick-track {
+ position: relative;
+ left: 0;
+ top: 0;
+ display: block;
+ zoom: 1;
+
+ &:before,
+ &:after {
+ content: "";
+ display: table;
+ }
+
+ &:after {
+ clear: both;
+ }
+
+ .slick-loading & {
+ visibility: hidden;
+ }
+}
+.slick-slide {
+ float: left;
+ height: 100%;
+ min-height: 1px;
+ img {
+ display: block;
+ &.slick-loading {
+ background: white url(./ajax-loader.gif) center center no-repeat;
+ padding-bottom: 100%;
+ }
+ }
+
+ display: none;
+
+ &.dragging img {
+ pointer-events: none;
+ }
+
+ .slick-initialized & {
+ display: block;
+ }
+
+ .slick-loading & {
+ visibility: hidden;
+ }
+
+ .slick-vertical & {
+ display: block;
+ height: auto;
+ border: 1px solid transparent;
+ }
+}
+
+/* Icons */
+
+ @charset"UTF-8";
+ @font-face {
+ font-family:"slick";
+ src:url("./fonts/slick.eot");
+ src:url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* Arrows */
+
+.slick-prev,
+.slick-next {
+ position: absolute;
+ display: block;
+ height: 20px;
+ width: 20px;
+ line-height: 0;
+ font-size: 0;
+ cursor: pointer;
+ background: transparent;
+ color: transparent;
+ top: 50%;
+ margin-top: -10px;
+ padding: 0;
+ border: none;
+ outline: none;
+ &:focus {
+ outline: none;
+ }
+ &.slick-disabled:before {
+ opacity: 0.25;
+ }
+}
+.slick-prev:before, .slick-next:before {
+ font-family:"slick";
+ font-size: 20px;
+ line-height: 1;
+ color: white;
+ opacity: 0.85;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.slick-prev {
+ left: -25px;
+ &:before {
+ content:'\2190';
+ }
+}
+.slick-next {
+ right: -25px;
+ &:before {
+ content:'\2192';
+ }
+}
+
+/* Dots */
+
+.slick-slider {
+ margin-bottom: 30px;
+}
+.slick-dots {
+ position: absolute;
+ bottom: -45px;
+ list-style: none;
+ display: block;
+ text-align: center;
+ padding: 0px;
+ width: 100%;
+
+ li {
+ position: relative;
+ display: inline-block;
+ height: 20px;
+ width: 20px;
+ margin: 0px 5px;
+ padding: 0px;
+ cursor: pointer;
+
+ button {
+ border: 0;
+ background: transparent;
+ display: block;
+ height: 20px;
+ width: 20px;
+ outline: none;
+ line-height: 0;
+ font-size: 0;
+ color: transparent;
+ padding: 5px;
+ cursor: pointer;
+ outline: none;
+ &:focus {
+ outline: none;
+ }
+
+ &:before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ content:'\2022';
+ width: 20px;
+ height: 20px;
+ font-family:"slick";
+ font-size: 6px;
+ line-height: 20px;
+ text-align: center;
+ color: black;
+ opacity: 0.25;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+
+ }
+
+ &.slick-active button:before {
+ opacity: 0.75;
+ }
+ }
+} \ No newline at end of file
diff --git a/static/website/templates/base.html b/static/website/templates/base.html
index 97b9194..172c901 100644
--- a/static/website/templates/base.html
+++ b/static/website/templates/base.html
@@ -5,6 +5,7 @@
<title>Spoken-Tutorial Forums</title>
{% compress css %}
<link rel="stylesheet" href="{% static 'website/css/bootstrap.min.css' %}" type="text/css" media="screen" charset="utf-8" />
+ <link rel="stylesheet" href="{% static 'website/slick/slick.css' %}" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="{% static 'website/css/main.css' %}" type="text/css" media="screen" charset="utf-8" />
{% endcompress %}
</head>
@@ -27,7 +28,7 @@
Spoken Tutorial Forums
</a>
</div> <!-- /.navbar-header -->
-
+
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
@@ -109,7 +110,7 @@
{% compress js %}
<script src="{% static 'website/js/jquery.min.js' %}"></script>
<script src="{% static 'website/js/bootstrap.min.js' %}"></script>
-
+ <script src="{% static 'website/slick/slick.min.js' %}"></script>
{% block javascript %}
<!-- overide with custom javascript -->
{% endblock %}
diff --git a/static/website/templates/get-question.html b/static/website/templates/get-question.html
index 48aa427..2b0371e 100644
--- a/static/website/templates/get-question.html
+++ b/static/website/templates/get-question.html
@@ -120,7 +120,7 @@
<div class="comments col-lg-11 pull-right">
<!-- displaying comments -->
{% for comment in answer.answercomment_set.all %}
- <div class="comment">
+ <div class="comment" id="comment{{ comment.id }}">
<div class="body" id="cbody{{ comment.id }}">
{{ comment.body|safe }}
</div>
@@ -128,12 +128,12 @@
<span class="meta">
<small>
<i>
- {{ question.date_created|date:"d-m-y" }}, {{ question.date_created|time }}
+ {{ comment.date_created|date:"d-m-y" }}, {{ question.date_created|time }}
</i>
</small>
<span class="user">
- {{ question.user }}
+ {{ comment.user }}
</span>
</span>
{% if user|can_edit:comment %}
diff --git a/static/website/templates/index.html b/static/website/templates/index.html
index 6e7af78..a5e746e 100644
--- a/static/website/templates/index.html
+++ b/static/website/templates/index.html
@@ -1,19 +1,171 @@
{% extends 'website/templates/base.html' %}
{% load static %}
+{% load count_tags %}
+
{% block content %}
-<div class="row">
- {% for category in categories %}
- <div class="col-lg-2 col-md-2 col-sm-2">
- <div class="thumbnail">
- <img src="{% static "website/images/" %}{{ category }}.jpg" height="75px" width="100%">
- <div class="caption">
- <h3>{{ category }}</h3>
- <p>
- <a class="btn btn-xs btn-default btn-block vs" href="/filter/{{ category }}">View Questions</a>
- </p>
+ <div id="carousel-container">
+ <div class="row">
+ <div class="col-lg-12">
+ <div class="carousel">
+ {% for category in categories %}
+ <div class="item">
+ <div class="thumb">
+ <img data-lazy="{% static "website/images/" %}{{ category }}.jpg" height="75px" width="99px">
+ </div>
+ <div class="descp">
+ <a class="btn btn-block btn-default btn-sm vs" href="{% url 'website:filter' category %}">{{ category }}</a>
+ </div>
+ </div> <!-- /.item -->
+ {% endfor %}
+ </div> <!-- /.carousel -->
+ </div> <!-- /.col -->
+ </div> <!-- /.row -->
+ </div>
+
+ <div id="filter-container">
+ <div class="row">
+ <form class ="" id="filter-form" action="" role="form">
+ <div class="col-lg-6">
+ <h3>Filter questions . . .</h3>
+ <div class="row">
+ <div class="form-group col-lg-10">
+ <select id="filter-select" class="form-control">
+ <option value="-1">Select a FOSS category</option>
+ {% for category in categories %}
+ <option value="{{ category }}">{{ category }}</option>
+ {% endfor %}
+ </select>
+ </div> <!-- /.form-group, .col -->
+ <div class="form-group col-lg-2">
+ <input class="btn btn-primary btn-block" type="submit" value="Go">
+ </div> <!-- /.form-group, .col -->
+ </div>
+ </div> <!-- /.col -->
+ </form>
+ <div class="col-lg-6">
+ <div class="row">
+ <div class="col-lg-6">
+ <h3 align="center"><strong>{% total_question_count %}</strong></h3>
+ <h3 align="center">Questions</h3>
+ </div>
+ <div class="col-lg-6">
+ <h3 align="center"><strong>{% total_answer_count %}</strong></h3>
+ <h3 align="center">Answers</h3>
+ </div>
+ </div>
</div>
+ </div> <!-- /.row -->
+ </div> <!-- /#filter-container -->
+
+ <br>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ Recent Questions
</div>
- </div>
- {% endfor %}
-</div>
+ <div class="panel-body">
+ <table class="table table-bordered table-hover">
+ <th> FOSS </th>
+ <th> Tutorial</th>
+ <th> Min </th>
+ <th> Sec </th>
+ <th> Question</th>
+ <th> Date</th>
+ <th> Views</th>
+ <th> Answers</th>
+ <th> User</th>
+ {% for question in questions %}
+ <tr>
+ <td>
+ <span href="#" class="category" data-toggle="tooltip" data-placement="top" title="{{ question.category}}">
+ {{ question.category|truncatechars:12 }}
+ </span>
+ <a class="pull-right" href="{% url 'website:filter' question.category %}?qid={{ question.id }}">
+ <span class="glyphicon glyphicon-search"></span>
+ </a>
+ </td>
+
+ <td>
+ <span class="tutorial" data-toggle="tooltip" data-placement="top" title="{{ question.tutorial}}">
+ {{ question.tutorial|truncatechars:12 }}
+ </span>
+ <a class="pull-right" href="{% url 'website:filter' question.category question.tutorial %}?qid={{ question.id }}">
+ <span class="glyphicon glyphicon-search"></span>
+ </a>
+ </td>
+
+ <td>
+ <span>
+ <a href="{% url 'website:filter' question.category question.tutorial question.minute_range %}?qid={{ question.id }}">
+ {{ question.minute_range }}
+ </a>
+ </span>
+ </td>
+
+ <td>
+ <span>
+ <a href="{% url 'website:filter' question.category question.tutorial question.minute_range question.second_range%}?qid={{ question.id }}">
+ {{ question.second_range }}
+ </a>
+ </span>
+ </td>
+
+ <td>
+ <span class="title" data-toggle="tooltip" data-placement="top" title="{{ question.title }}">
+ <a href="{% url 'website:get_question' question.id %}">{{ question.title|truncatechars:40 }}</a>
+ </span>
+ </td>
+
+ <td>
+ <span>
+ <i>
+ {{ question.date_created|date:"d-m-y" }}
+ </i>
+ </span>
+ </td>
+
+ <td>
+ {{ question.views}}
+ </td>
+
+ <td>
+ {{ question.answer_set.count }}
+ </td>
+
+ <td>
+ <span class="title" data-toggle="tooltip" data-placement="top" title="{{ question.user }}">
+ {{ question.user|truncatechars:10 }}
+ </span>
+ </td>
+ </tr>
+ {% endfor %}
+
+ </table>
+ </div> <!-- /.panel-body -->
+ </div> <!-- /.panel -->
+{% endblock %}
+
+{% block javascript %}
+<script>
+ $(document).ready(function(){
+ $('.carousel').slick({
+ lazyLoad: 'ondemand',
+ dots: false,
+ touchMove: false,
+ draggable: false,
+ slidesToShow: 8,
+ slidesToScroll: 3,
+ speed: 500,
+ {# autoplay: true, #}
+ autoplaySpeed: 1000,
+ });
+
+ $("#filter-form").submit(function(e) {
+ var category = $("#filter-select").val();
+ if(category != -1) {
+ window.location = "/filter/" + category;
+ }
+ e.preventDefault();
+ });
+ });
+</script>
{% endblock %}
diff --git a/static/website/templates/notify.html b/static/website/templates/notify.html
index af93eb5..a98d21a 100644
--- a/static/website/templates/notify.html
+++ b/static/website/templates/notify.html
@@ -1,6 +1,14 @@
<div class="notification">
- <a href=""><strong>{{ answer.user }}</strong> answers to <strong>{{ question.title }}</strong></a> /
- {{ answer.body|safe }}
+ {% if notification.cid != 0 and notification.aid != 0 %}
+ <small>
+ <a href="">New <strong>Comment</strong> on "{{ question.title }}"</a>
+ </small>
+ {% elif notification.cid == 0 %}
+ <a href="">New <strong>Answer</strong> on "{{ question.title }}"</a>
+ {% endif %}
+
+
+ <!-- <a href=""><strong>{{ answer.user }}</strong> answers to <strong>{{ question.title }}</strong></a> -->
<a class="remove" data-nid="{{ notification.id }}" href="#">
<span class="glyphicon glyphicon-remove-circle"></span>
</a>
diff --git a/website/models.py b/website/models.py
index 7157ee5..c280d2d 100644
--- a/website/models.py
+++ b/website/models.py
@@ -16,7 +16,7 @@ class Question(models.Model):
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
views = models.IntegerField(default=1)
- votes = models.IntegerField(default=0)
+ # votes = models.IntegerField(default=0)
def user(self):
user = User.objects.get(id=self.uid)
@@ -39,7 +39,7 @@ class Answer(models.Model):
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
- votes = models.IntegerField(default=0)
+ # votes = models.IntegerField(default=0)
def user(self):
user = User.objects.get(id=self.uid)
@@ -64,8 +64,13 @@ class Notification(models.Model):
uid = models.IntegerField()
pid = models.IntegerField()
qid = models.IntegerField()
- rid = models.IntegerField()
+ aid = models.IntegerField(default=0)
+ cid = models.IntegerField(default=0)
date_created = models.DateTimeField(auto_now_add=True)
+
+ def poster(self):
+ user = User.objects.get(id=self.pid)
+ return user.username
# CDEEP database created using inspectdb arg of manage.py
class TutorialDetails(models.Model):
diff --git a/website/templatetags/count_tags.py b/website/templatetags/count_tags.py
index 48ba020..735675a 100644
--- a/website/templatetags/count_tags.py
+++ b/website/templatetags/count_tags.py
@@ -59,3 +59,15 @@ register.filter('mul', mul)
def div(value, arg=1):
return value / int(arg)
register.filter('div', div)
+
+# retriving total number of questions
+def total_question_count():
+ count = Question.objects.all().count()
+ return count
+register.simple_tag(total_question_count)
+
+# retriving total number of answers
+def total_answer_count():
+ count = Answer.objects.all().count()
+ return count
+register.simple_tag(total_answer_count)
diff --git a/website/templatetags/notify.py b/website/templatetags/notify.py
index 4c1e655..44465ea 100644
--- a/website/templatetags/notify.py
+++ b/website/templatetags/notify.py
@@ -7,7 +7,7 @@ register = template.Library()
def get_notification(nid):
notification = Notification.objects.get(pk=nid)
question = Question.objects.get(pk=notification.qid);
- answer = Answer.objects.get(pk=notification.rid)
+ answer = Answer.objects.get(pk=notification.aid)
context = {
'notification': notification,
'question': question,
@@ -20,4 +20,3 @@ def notification_count(user_id):
count = Notification.objects.filter(uid=user_id).count()
return count
register.simple_tag(notification_count)
-
diff --git a/website/views.py b/website/views.py
index e368feb..7e7e813 100644
--- a/website/views.py
+++ b/website/views.py
@@ -35,8 +35,10 @@ categories = (
)
def home(request):
+ questions = Question.objects.all().order_by('date_created').reverse()[:10]
context = {
- 'categories': categories
+ 'categories': categories,
+ 'questions': questions
}
return render(request, "website/templates/index.html", context)
@@ -91,10 +93,33 @@ def question_answer(request):
notification.qid = qid
notification.aid = answer.id
notification.save()
- #CONTINUE continue
- # foo = User.objects.get(pk=)
- return HttpResponse(foo)
- return HttpResponseRedirect('/question/'+str(qid))
+
+ user = User.objects.get(id=question.uid)
+ # Sending email when an answer is posted
+ subject = 'Question has been answered'
+ message = """
+ Dear {0}<br><br>
+ Your question titled <b>"{1}"</b> has been answered.<br>
+ Link: {2}<br><br>
+ Regards,<br>
+ Spoken Tutorial Forums
+ """.format(
+ user.username,
+ question.title,
+ 'http://forums.spoken-tutorial.org/question/' + str(question.id) + "#answer" + str(answer.id)
+ )
+
+ email = EmailMultiAlternatives(
+ subject,'', 'forums',
+ [user.email],
+ headers={"Content-type":"text/html;charset=iso-8859-1"}
+ )
+
+ email.attach_alternative(message, "text/html")
+ email.send(fail_silently=True)
+ # End of email send
+
+ return HttpResponseRedirect('/question/'+str(qid) + "#answer" + str(answer.id))
@login_required
def answer_comment(request):
@@ -107,7 +132,60 @@ def answer_comment(request):
comment.answer = answer
comment.body = body
comment.save()
- return HttpResponseRedirect("/question/" + str(answer.question.id) + "#")
+
+ # notifying the answer owner
+ if answer.uid != request.user.id:
+ notification = Notification()
+ notification.uid = answer.uid
+ notification.pid = request.user.id
+ notification.qid = answer.question.id
+ notification.aid = answer.id
+ notification.cid = comment.id
+ notification.save()
+
+ user = User.objects.get(id=answer.uid)
+ subject = 'Comment for your answer'
+ message = """
+ Dear {0}<br><br>
+ A comment has been posted on your answer.<br>
+ Link: {1}<br><br>
+ Regards,<br>
+ Spoken Tutorial Forums
+ """.format(
+ user.username,
+ "http://forums.spoken-tutorial.org/question/" + str(answer.question.id) + "#answer" + str(answer.id)
+ )
+ forums_mail(user.email, subject, message)
+
+ # notifying other users in the comment thread
+ uids = answer.answercomment_set.filter(answer=answer).values_list('uid', flat=True)
+ #getting distinct uids
+ uids = set(uids)
+ uids.remove(request.user.id)
+ for uid in uids:
+ notification = Notification()
+ notification.uid = uid
+ notification.pid = request.user.id
+ notification.qid = answer.question.id
+ notification.aid = answer.id
+ notification.cid = comment.id
+ notification.save()
+
+ user = User.objects.get(id=uid)
+ subject = 'Comment has a reply'
+ message = """
+ Dear {0}<br><br>
+ A reply has been posted on your comment.<br>
+ Link: {1}<br><br>
+ Regards,<br>
+ Spoken Tutorial Forums
+ """.format(
+ user.username,
+ "http://forums.spoken-tutorial.org/question/" + str(answer.question.id) + "#answer" + str(answer.id)
+ )
+ forums_mail(user.email, subject, message)
+ return HttpResponse(message)
+ return HttpResponseRedirect("/question/" + str(answer.question.id) + "#")
def filter(request, category=None, tutorial=None, minute_range=None, second_range=None):
context = {
@@ -423,4 +501,16 @@ def ajax_time_search(request):
@csrf_exempt
def ajax_vote(request):
+ #for future use
pass
+
+def forums_mail(to = '', subject='', message=''):
+ # Start of email send
+ email = EmailMultiAlternatives(
+ subject,'', 'forums',
+ [to],
+ headers={"Content-type":"text/html;charset=iso-8859-1"}
+ )
+ email.attach_alternative(message, "text/html")
+ email.send(fail_silently=True)
+ # End of email send