diff --git a/openedx/core/djangoapps/theming/tests/test_helpers.py b/openedx/core/djangoapps/theming/tests/test_helpers.py index b7ca6dcc17..9774671233 100644 --- a/openedx/core/djangoapps/theming/tests/test_helpers.py +++ b/openedx/core/djangoapps/theming/tests/test_helpers.py @@ -25,6 +25,7 @@ class TestHelpers(TestCase): Theme('red-theme', 'red-theme', get_theme_base_dir('red-theme')), Theme('edge.edx.org', 'edge.edx.org', get_theme_base_dir('edge.edx.org')), Theme('edx.org', 'edx.org', get_theme_base_dir('edx.org')), + Theme('example', 'example', get_theme_base_dir('example')), Theme('stanford-style', 'stanford-style', get_theme_base_dir('stanford-style')), ] actual_themes = get_themes() diff --git a/themes/example/lms/static/images/about-img.png b/themes/example/lms/static/images/about-img.png new file mode 100644 index 0000000000..69768cd538 Binary files /dev/null and b/themes/example/lms/static/images/about-img.png differ diff --git a/themes/example/lms/static/images/course-thumbnail.jpg b/themes/example/lms/static/images/course-thumbnail.jpg new file mode 100644 index 0000000000..e4c3c4a850 Binary files /dev/null and b/themes/example/lms/static/images/course-thumbnail.jpg differ diff --git a/themes/example/lms/static/images/hero-course-catalog.png b/themes/example/lms/static/images/hero-course-catalog.png new file mode 100644 index 0000000000..b24a3cb97c Binary files /dev/null and b/themes/example/lms/static/images/hero-course-catalog.png differ diff --git a/themes/example/lms/static/images/hero-course-detail.jpg b/themes/example/lms/static/images/hero-course-detail.jpg new file mode 100644 index 0000000000..e5c4cdce13 Binary files /dev/null and b/themes/example/lms/static/images/hero-course-detail.jpg differ diff --git a/themes/example/lms/static/images/hero-home-page.jpg b/themes/example/lms/static/images/hero-home-page.jpg new file mode 100644 index 0000000000..624f53eb9d Binary files /dev/null and b/themes/example/lms/static/images/hero-home-page.jpg differ diff --git a/themes/example/lms/static/images/openedx-logo-tag.png b/themes/example/lms/static/images/openedx-logo-tag.png new file mode 100644 index 0000000000..5f8085cf10 Binary files /dev/null and b/themes/example/lms/static/images/openedx-logo-tag.png differ diff --git a/themes/example/lms/static/images/openedx-logo.png b/themes/example/lms/static/images/openedx-logo.png new file mode 100644 index 0000000000..eb944aacbb Binary files /dev/null and b/themes/example/lms/static/images/openedx-logo.png differ diff --git a/themes/example/lms/static/images/page-heading.png b/themes/example/lms/static/images/page-heading.png new file mode 100644 index 0000000000..9968a717db Binary files /dev/null and b/themes/example/lms/static/images/page-heading.png differ diff --git a/themes/example/lms/static/images/user-thumbnail.png b/themes/example/lms/static/images/user-thumbnail.png new file mode 100644 index 0000000000..9a65d8c8dc Binary files /dev/null and b/themes/example/lms/static/images/user-thumbnail.png differ diff --git a/themes/example/lms/static/images/vid-btn.png b/themes/example/lms/static/images/vid-btn.png new file mode 100644 index 0000000000..61eb221cec Binary files /dev/null and b/themes/example/lms/static/images/vid-btn.png differ diff --git a/themes/example/lms/static/images/vid-img.jpg b/themes/example/lms/static/images/vid-img.jpg new file mode 100644 index 0000000000..a05a362482 Binary files /dev/null and b/themes/example/lms/static/images/vid-img.jpg differ diff --git a/themes/example/lms/static/js/about-site.js b/themes/example/lms/static/js/about-site.js new file mode 100644 index 0000000000..9150795c5a --- /dev/null +++ b/themes/example/lms/static/js/about-site.js @@ -0,0 +1,31 @@ +(function(require) { + 'use strict'; + require(['edx-ui-toolkit/js/utils/html-utils'], function(HtmlUtils) { + function addSlider() { + var isMobileResolution = $(window).width() < 768, + sliderExists = $('.about-list').hasClass('slick-slider'); + $('.about-list').toggleClass('slidable', isMobileResolution); + if (isMobileResolution) { + if (!sliderExists) { + $('.about-list').find('.about-list-item').removeClass('col col-4'); + $('.slidable').slick({ + nextArrow: '', + prevArrow: '' + }); + } + } else { + HtmlUtils.setHtml('.about-container', HtmlUtils.HTML($('#about-content').html())); + } + } + + + $(function() { + HtmlUtils.setHtml('.about-container', HtmlUtils.HTML($('#about-content').html())); + addSlider(); + }); + + $(window).resize(function() { + addSlider(); + }); + }); +}).call(this, require || RequireJS.require); diff --git a/themes/example/lms/static/js/animation-scroll.js b/themes/example/lms/static/js/animation-scroll.js new file mode 100644 index 0000000000..56d35bef09 --- /dev/null +++ b/themes/example/lms/static/js/animation-scroll.js @@ -0,0 +1,15 @@ +$(document).ready(function() { + 'use strict'; + + var div = ''; + $('.back-to-top').on('click', function(event) { + event.preventDefault(); + $('html, body').animate({scrollTop: 0}, 300); + }); + + $('ul.list-divided li.item a').on('click', function(event) { + event.preventDefault(); + div = $(this).attr('href'); + $('html, body').animate({scrollTop: $(div).offset().top}, 300); + }); +}); diff --git a/themes/example/lms/static/js/contact-form.js b/themes/example/lms/static/js/contact-form.js new file mode 100644 index 0000000000..dd940a78d2 --- /dev/null +++ b/themes/example/lms/static/js/contact-form.js @@ -0,0 +1,82 @@ +(function(require) { + 'use strict'; + + require(['edx-ui-toolkit/js/utils/html-utils', 'edx-ui-toolkit/js/utils/string-utils'], + function(HtmlUtils, StringUtils) { + var errorMessages = { + name: 'Please provide your name.', + email: 'Please provide a valid e-mail.', + details: 'Please provide message.', + subject: 'Please provide an inquiry type.' + }; + function addErrorDiv(id) { + var start = HtmlUtils.HTML('
'), + errorDiv = StringUtils.interpolate( + '{start}{errorMessage}{end}', + { + start: start, + errorMessage: errorMessages[id], + end: HtmlUtils.HTML('
') + } + ); + $('#' + id).addClass('has-error'); + $('#' + id).parent().append(HtmlUtils.template(errorDiv)().toString()); + } + function submitForm(data) { + $.post('/submit_feedback', data, function() { + $('#success-message-btn').click(); + setTimeout(function() { + $('#lean_overlay').trigger('click'); + $('#contact_form').trigger('reset'); + }, 2000); + }).fail(function(xhr) { + var responseData = jQuery.parseJSON(xhr.responseText); + addErrorDiv(responseData.field); + }); + } + + function removeErrorDiv(id) { + $('#' + id).removeClass('has-error'); + $($('#' + id).next()).remove(); + } + function validateForm() { + var optionalFields = ['user_type']; // Optional fields array + var formValues = $('#contact_form').find(':input'), + i = 0, + data = {}, + value = '', + id = '', + response = { + is_form_validate: true, + data: '' + }; + + for (i = 0; i < formValues.length - 2; i++) { + value = $(formValues[i]).val(); + id = $(formValues[i]).attr('id'); + removeErrorDiv(id); + + if (value && value !== '') { + data[id] = value; + } else { + if ($.inArray(id, optionalFields) === -1) { + response.is_form_validate = false; + addErrorDiv(id); + } + } + } + response.data = data; + return response; + } + $(function() { + var validateFormData = ''; + $('#submit_btn').click(function(e) { + e.preventDefault(); + validateFormData = validateForm(); + if (validateFormData.is_form_validate) { + submitForm(validateFormData.data); + } + }); + }); + }); +}).call(this, require || RequireJS.require); diff --git a/themes/example/lms/static/js/course-about.js b/themes/example/lms/static/js/course-about.js new file mode 100644 index 0000000000..e7026e39fa --- /dev/null +++ b/themes/example/lms/static/js/course-about.js @@ -0,0 +1,70 @@ + +(function(require) { + 'use strict'; + + require([ + 'edx-ui-toolkit/js/utils/html-utils', + '/static/example/js/leanModal.js' + ], function(HtmlUtils) { // eslint-disable-line no-unused-vars // jshint ignore:line + function expandDescription(entireDescriptionContent) { + var showLessLinkHtml = 'Less'; + HtmlUtils.setHtml('.course-description', HtmlUtils.HTML(entireDescriptionContent + showLessLinkHtml)); + $('#description_less').click(function(event) { + event.preventDefault(); + truncateDescription(entireDescriptionContent); // eslint-disable-line no-use-before-define + }); + } + function truncateDescription(entireDescriptionContent) { + var showMoreLink = '', + truncatedContent = ''; + if (entireDescriptionContent.length > 500) { + showMoreLink = '... See More'; + truncatedContent = entireDescriptionContent.substring(0, entireDescriptionContent.indexOf(' ', 500)); + HtmlUtils.setHtml('.course-description', HtmlUtils.HTML(truncatedContent + showMoreLink)); + $('#description_show').click(function(event) { + event.preventDefault(); + expandDescription(entireDescriptionContent); + }); + } + } + function expandLearningPoints(entireLearningContent) { + var showLessLinkHtml = 'Less'; + HtmlUtils.setHtml( + '.course-learning .list-bulleted', + HtmlUtils.HTML(entireLearningContent + showLessLinkHtml) + ); + $('#learning_less').click(function() { + truncateLearningPoints(entireLearningContent); // eslint-disable-line no-use-before-define + }); + } + function truncateLearningPoints(entireLearningContent) { + var learningPointsCount = $('.course-learning .list-bulleted').children().length, + points = '', + showMoreLink = ''; + if (learningPointsCount > 6) { + points = $('.course-learning .list-bulleted').children().slice((6 - learningPointsCount)); + points.remove(); + showMoreLink = 'See More'; + HtmlUtils.append('.course-learning .list-bulleted', HtmlUtils.HTML(showMoreLink)); + $('#learning_show').click(function(event) { + event.preventDefault(); + expandLearningPoints(entireLearningContent); + }); + } + } + function init() { + var entireDescriptionContent = $('.course-description').html(), + entireLearningContent = $('.course-learning .list-bulleted').html(); + + // Truncating the Course Description + truncateDescription(entireDescriptionContent); + + // Truncating the Course learning points + truncateLearningPoints(entireLearningContent); + + // Instructor Modal + $('.instructor-image').leanModal({closeButton: '.modal_close', top: '10%'}); + } + init(); + }); +}).call(this, require || RequireJS.require); diff --git a/themes/example/lms/static/js/leanModal.js b/themes/example/lms/static/js/leanModal.js new file mode 100644 index 0000000000..e11fe8c8f7 --- /dev/null +++ b/themes/example/lms/static/js/leanModal.js @@ -0,0 +1,143 @@ +/*eslint-disable */ + +(function(require) { + "use strict"; + + require(['edx-ui-toolkit/js/utils/html-utils'], function(HtmlUtils) { + $.fn.extend({ + /* + * leanModal prepares an element to be a modal dialog. Call it once on the + * element that launches the dialog, when the page is ready. This function + * will add a .click() handler that properly opens the dialog. + * + * The launching element must: + * - be an element, not a button, + * - have an href= attribute identifying the id of the dialog element, + * - have rel='leanModal'. + */ + leanModal: function(options) { + var defaults = { + top: 100, + overlay: 0.5, + closeButton: null, + position: 'fixed' + }; + if ($("#lean_overlay").length === 0) { + var overlay = $("
"); + $("body").append(HtmlUtils.template(overlay)().toString()); + } + options = $.extend(defaults, options); + return this.each(function() { + var o = options; + $(this).click(function(e) { + $(".modal").hide(); + var modal_id = $(this).attr("href"); + if ($(modal_id).hasClass("video-modal")) { + //Video modals need to be cloned before being presented as a modal + //This is because actions on the video get recorded in the history. + //Deleting the video (clone) prevents the odd back button behavior. + var modal_clone = $(modal_id).clone(true, + true); + modal_clone.attr('id', 'modal_clone'); + + $(modal_id).after(HtmlUtils.ensureHtml(modal_clone).toString()); + + modal_id = '#modal_clone'; + } + $("#lean_overlay").click(function(e) { + close_modal(modal_id, e); + }); + $(o.closeButton).click(function(e) { + close_modal(modal_id, e); + }); + // To enable closing of email modal when copy button hit + $(o.copyEmailButton).click(function(e) { + close_modal(modal_id, e); + }); + var modal_width = $(modal_id).outerWidth(); + $('#lean_overlay').css({ + 'display': 'block', + opacity: 0 + }); + $('#lean_overlay').fadeTo(200, o.overlay); + $('iframe', modal_id).attr('src', $('iframe', + modal_id).data('src')); + if ($(modal_id).hasClass("email-modal")) { + $(modal_id).css({ + 'width': 80 + '%', + 'height': 80 + '%', + 'position': o.position, + 'opacity': 0, + 'z-index': 11000, + 'left': 10 + '%', + 'top': 10 + '%' + }); + } else { + $(modal_id).css({ + 'position': o.position, + 'opacity': 0, + 'z-index': 11000, + 'left': 50 + '%', + 'margin-left': -(modal_width / 2) + + "px", + 'top': o.top + "px" + }); + } + $(modal_id).show().fadeTo(200, 1); + $(modal_id).find(".notice").hide().html(""); + var notice = $(this).data('notice'); + if (notice !== undefined) { + var $notice = $(modal_id).find(".notice"); + $notice.show(); + $notice.append(HtmlUtils.ensureHtml(notice).toString()); + + // This is for activating leanModal links that were in the notice. We should have a cleaner way of + // allowing all dynamically added leanmodal links to work. + $notice.find("a[rel*=leanModal]").leanModal({ + top: 120, + overlay: 1, + closeButton: ".close-modal", + position: 'absolute' + }); + } + e.preventDefault(); + }); + }); + + function close_modal(modal_id, e) { + $("#lean_overlay").fadeOut(200); + $('iframe', modal_id).attr('src', ''); + $(modal_id).css({ + 'display': 'none' + }); + if (modal_id === '#modal_clone') { + $(modal_id).remove(); + } + e.preventDefault(); + } + } + }); + $(document).ready(function($) { + $("a[rel*=leanModal]").each(function() { + $(this).leanModal({ + top: 120, + overlay: 1, + closeButton: ".close-modal", + position: 'absolute' + }); + var embed = $($(this).attr('href')).find('iframe'); + if (embed.length > 0 && embed.attr('src')) { + var sep = (embed.attr('src').indexOf("?") > 0) ? '&' : + '?'; + embed.data('src', embed.attr('src') + sep + + 'autoplay=1&rel=0'); + embed.attr('src', ''); + } + }); + }); + }); +}).call( + this, + typeof define === 'function' && define.amd ? define : + (typeof RequireJS !== 'undefined' ? RequireJS.define : "") +); diff --git a/themes/example/lms/static/js/slick.min.js b/themes/example/lms/static/js/slick.min.js new file mode 100755 index 0000000000..502b348b75 --- /dev/null +++ b/themes/example/lms/static/js/slick.min.js @@ -0,0 +1,20 @@ +/* + _ _ _ _ + ___| (_) ___| | __ (_)___ +/ __| | |/ __| |/ / | / __| +\__ \ | | (__| < _ | \__ \ +|___/_|_|\___|_|\_(_)/ |___/ + |__/ + + Version: 1.5.9 + 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 + + */ + /* jshint ignore:start */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(a,b){return'"},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!1,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,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,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.hidden="hidden",e.paused=!1,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,f,d),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,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.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0),e.checkResponsive(!0)}var b=0;return c}(),b.prototype.addSlide=b.prototype.slickAdd=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).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),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?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.asNavFor=function(b){var c=this,d=c.options.asNavFor;d&&null!==d&&(d=a(d).not(c.$slider)),null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="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)):(a.currentSlide-1===0&&(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.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(d='",b.$dots=a(d).appendTo(b.options.appendDots),b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden","false")}},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.$slides.each(function(b,c){a(c).attr("data-slick-index",b).data("originalStyling",a(c).attr("style")||"")}),b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('
').appendTo(b.$slider):b.$slides.wrapAll('
').parent(),b.$list=b.$slideTrack.wrap('
').parent(),b.$slideTrack.css("opacity",0),(b.options.centerMode===!0||b.options.swipeToSlide===!0)&&(b.options.slidesToScroll=1),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.buildRows=function(){var b,c,d,e,f,g,h,a=this;if(e=document.createDocumentFragment(),g=a.$slider.children(),a.options.rows>1){for(h=a.options.slidesPerRow*a.options.rows,f=Math.ceil(g.length/h),b=0;f>b;b++){var i=document.createElement("div");for(c=0;cd.breakpoints[e]&&(f=d.breakpoints[e]));null!==f?null!==d.activeBreakpoint?(f!==d.activeBreakpoint||c)&&(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):null!==d.activeBreakpoint&&(d.activeBreakpoint=null,d.options=d.originalSettings,b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b),h=f),b||h===!1||d.$slider.trigger("breakpoint",[d,h])}},b.prototype.changeSlide=function(b,c){var f,g,h,d=this,e=a(b.target);switch(e.is("a")&&b.preventDefault(),e.is("li")||(e=e.closest("li")),h=d.slideCount%d.options.slidesToScroll!==0,f=h?0:(d.slideCount-d.currentSlide)%d.options.slidesToScroll,b.data.message){case"previous":g=0===f?d.options.slidesToScroll:d.options.slidesToShow-f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide-g,!1,c);break;case"next":g=0===f?d.options.slidesToScroll:f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide+g,!1,c);break;case"index":var i=0===b.data.index?0:b.data.index||e.index()*d.options.slidesToScroll;d.slideHandler(d.checkNavigable(i),!1,c),e.children().trigger("focus");break;default:return}},b.prototype.checkNavigable=function(a){var c,d,b=this;if(c=b.getNavigableIndexes(),d=0,a>c[c.length-1])a=c[c.length-1];else for(var e in c){if(ab.options.slidesToShow&&(b.$prevArrow&&b.$prevArrow.off("click.slick",b.changeSlide),b.$nextArrow&&b.$nextArrow.off("click.slick",b.changeSlide)),b.$list.off("touchstart.slick mousedown.slick",b.swipeHandler),b.$list.off("touchmove.slick mousemove.slick",b.swipeHandler),b.$list.off("touchend.slick mouseup.slick",b.swipeHandler),b.$list.off("touchcancel.slick mouseleave.slick",b.swipeHandler),b.$list.off("click.slick",b.clickHandler),a(document).off(b.visibilityChange,b.visibility),b.$list.off("mouseenter.slick",a.proxy(b.setPaused,b,!0)),b.$list.off("mouseleave.slick",a.proxy(b.setPaused,b,!1)),b.options.accessibility===!0&&b.$list.off("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().off("click.slick",b.selectHandler),a(window).off("orientationchange.slick.slick-"+b.instanceUid,b.orientationChange),a(window).off("resize.slick.slick-"+b.instanceUid,b.resize),a("[draggable!=true]",b.$slideTrack).off("dragstart",b.preventDefault),a(window).off("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).off("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.cleanUpRows=function(){var b,a=this;a.options.rows>1&&(b=a.$slides.children().children(),b.removeAttr("style"),a.$slider.html(b))},b.prototype.clickHandler=function(a){var b=this;b.shouldClick===!1&&(a.stopImmediatePropagation(),a.stopPropagation(),a.preventDefault())},b.prototype.destroy=function(b){var c=this;c.autoPlayClear(),c.touchObject={},c.cleanUpEvents(),a(".slick-cloned",c.$slider).detach(),c.$dots&&c.$dots.remove(),c.$prevArrow&&c.$prevArrow.length&&(c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.prevArrow)&&c.$prevArrow.remove()),c.$nextArrow&&c.$nextArrow.length&&(c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.nextArrow)&&c.$nextArrow.remove()),c.$slides&&(c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){a(this).attr("style",a(this).data("originalStyling"))}),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.detach(),c.$list.detach(),c.$slider.append(c.$slides)),c.cleanUpRows(),c.$slider.removeClass("slick-slider"),c.$slider.removeClass("slick-initialized"),c.unslicked=!0,b||c.$slider.trigger("destroy",[c])},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:c.options.zIndex}),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:c.options.zIndex}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.fadeSlideOut=function(a){var b=this;b.cssTransitions===!1?b.$slides.eq(a).animate({opacity:0,zIndex:b.options.zIndex-2},b.options.speed,b.options.easing):(b.applyTransition(a),b.$slides.eq(a).css({opacity:0,zIndex:b.options.zIndex-2}))},b.prototype.filterSlides=b.prototype.slickFilter=function(a){var b=this;null!==a&&(b.$slidesCache=b.$slides,b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.getCurrent=b.prototype.slickCurrentSlide=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var a=this,b=0,c=0,d=0;if(a.options.infinite===!0)for(;bb.options.slidesToShow&&(b.slideOffset=b.slideWidth*b.options.slidesToShow*-1,e=d*b.options.slidesToShow*-1),b.slideCount%b.options.slidesToScroll!==0&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(a>b.slideCount?(b.slideOffset=(b.options.slidesToShow-(a-b.slideCount))*b.slideWidth*-1,e=(b.options.slidesToShow-(a-b.slideCount))*d*-1):(b.slideOffset=b.slideCount%b.options.slidesToScroll*b.slideWidth*-1,e=b.slideCount%b.options.slidesToScroll*d*-1))):a+b.options.slidesToShow>b.slideCount&&(b.slideOffset=(a+b.options.slidesToShow-b.slideCount)*b.slideWidth,e=(a+b.options.slidesToShow-b.slideCount)*d),b.slideCount<=b.options.slidesToShow&&(b.slideOffset=0,e=0),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset=0,b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?a*b.slideWidth*-1+b.slideOffset:a*d*-1+e,b.options.variableWidth===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,b.options.centerMode===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow+1),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,c+=(b.$list.width()-f.outerWidth())/2)),c},b.prototype.getOption=b.prototype.slickGetOption=function(a){var b=this;return b.options[a]},b.prototype.getNavigableIndexes=function(){var e,a=this,b=0,c=0,d=[];for(a.options.infinite===!1?e=a.slideCount:(b=-1*a.options.slidesToScroll,c=-1*a.options.slidesToScroll,e=2*a.slideCount);e>b;)d.push(b),b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;return d},b.prototype.getSlick=function(){return this},b.prototype.getSlideCount=function(){var c,d,e,b=this;return e=b.options.centerMode===!0?b.slideWidth*Math.floor(b.options.slidesToShow/2):0,b.options.swipeToSlide===!0?(b.$slideTrack.find(".slick-slide").each(function(c,f){return f.offsetLeft-e+a(f).outerWidth()/2>-1*b.swipeLeft?(d=f,!1):void 0}),c=Math.abs(a(d).attr("data-slick-index")-b.currentSlide)||1):b.options.slidesToScroll},b.prototype.goTo=b.prototype.slickGoTo=function(a,b){var c=this;c.changeSlide({data:{message:"index",index:parseInt(a)}},b)},b.prototype.init=function(b){var c=this;a(c.$slider).hasClass("slick-initialized")||(a(c.$slider).addClass("slick-initialized"),c.buildRows(),c.buildOut(),c.setProps(),c.startLoad(),c.loadSlider(),c.initializeEvents(),c.updateArrows(),c.updateDots()),b&&c.$slider.trigger("init",[c]),c.options.accessibility===!0&&c.initADA()},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.options.dots===!0&&b.options.pauseOnDotsHover===!0&&b.options.autoplay===!0&&a("li",b.$dots).on("mouseenter.slick",a.proxy(b.setPaused,b,!0)).on("mouseleave.slick",a.proxy(b.setPaused,b,!1))},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.$list.on("click.slick",b.clickHandler),a(document).on(b.visibilityChange,a.proxy(b.visibility,b)),b.$list.on("mouseenter.slick",a.proxy(b.setPaused,b,!0)),b.$list.on("mouseleave.slick",a.proxy(b.setPaused,b,!1)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,a.proxy(b.orientationChange,b)),a(window).on("resize.slick.slick-"+b.instanceUid,a.proxy(b.resize,b)),a("[draggable!=true]",b.$slideTrack).on("dragstart",b.preventDefault),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.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;a.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===a.keyCode&&b.options.accessibility===!0?b.changeSlide({data:{message:"previous"}}):39===a.keyCode&&b.options.accessibility===!0&&b.changeSlide({data:{message:"next"}}))},b.prototype.lazyLoad=function(){function g(b){a("img[data-lazy]",b).each(function(){var b=a(this),c=a(this).attr("data-lazy"),d=document.createElement("img");d.onload=function(){b.animate({opacity:0},100,function(){b.attr("src",c).animate({opacity:1},200,function(){b.removeAttr("data-lazy").removeClass("slick-loading")})})},d.src=c})}var c,d,e,f,b=this;b.options.centerMode===!0?b.options.infinite===!0?(e=b.currentSlide+(b.options.slidesToShow/2+1),f=e+b.options.slidesToShow+2):(e=Math.max(0,b.currentSlide-(b.options.slidesToShow/2+1)),f=2+(b.options.slidesToShow/2+1)+b.currentSlide):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=e+b.options.slidesToShow,b.options.fade===!0&&(e>0&&e--,f<=b.slideCount&&f++)),c=b.$slider.find(".slick-slide").slice(e,f),g(c),b.slideCount<=b.options.slidesToShow?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},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.next=b.prototype.slickNext=function(){var a=this;a.changeSlide({data:{message:"next"}})},b.prototype.orientationChange=function(){var a=this;a.checkResponsive(),a.setPosition()},b.prototype.pause=b.prototype.slickPause=function(){var a=this;a.autoPlayClear(),a.paused=!0},b.prototype.play=b.prototype.slickPlay=function(){var a=this;a.paused=!1,a.autoPlay()},b.prototype.postSlide=function(a){var b=this;b.$slider.trigger("afterChange",[b,a]),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay===!0&&b.paused===!1&&b.autoPlay(),b.options.accessibility===!0&&b.initADA()},b.prototype.prev=b.prototype.slickPrev=function(){var a=this;a.changeSlide({data:{message:"previous"}})},b.prototype.preventDefault=function(a){a.preventDefault()},b.prototype.progressiveLazyLoad=function(){var c,d,b=this;c=a("img[data-lazy]",b.$slider).length,c>0&&(d=a("img[data-lazy]",b.$slider).first(),d.attr("src",null),d.attr("src",d.attr("data-lazy")).removeClass("slick-loading").load(function(){d.removeAttr("data-lazy"),b.progressiveLazyLoad(),b.options.adaptiveHeight===!0&&b.setPosition()}).error(function(){d.removeAttr("data-lazy"),b.progressiveLazyLoad()}))},b.prototype.refresh=function(b){var d,e,c=this;e=c.slideCount-c.options.slidesToShow,c.options.infinite||(c.slideCount<=c.options.slidesToShow?c.currentSlide=0:c.currentSlide>e&&(c.currentSlide=e)),d=c.currentSlide,c.destroy(!0),a.extend(c,c.initials,{currentSlide:d}),c.init(),b||c.changeSlide({data:{message:"index",index:d}},!1)},b.prototype.registerBreakpoints=function(){var c,d,e,b=this,f=b.options.responsive||null;if("array"===a.type(f)&&f.length){b.respondTo=b.options.respondTo||"window";for(c in f)if(e=b.breakpoints.length-1,d=f[c].breakpoint,f.hasOwnProperty(c)){for(;e>=0;)b.breakpoints[e]&&b.breakpoints[e]===d&&b.breakpoints.splice(e,1),e--;b.breakpoints.push(d),b.breakpointSettings[d]=f[c].settings}b.breakpoints.sort(function(a,c){return b.options.mobileFirst?a-c:c-a})}},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.slideCount<=b.options.slidesToShow&&(b.currentSlide=0),b.registerBreakpoints(),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.checkResponsive(!1,!0),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),b.setSlideClasses(0),b.setPosition(),b.$slider.trigger("reInit",[b]),b.options.autoplay===!0&&b.focusHandler()},b.prototype.resize=function(){var b=this;a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.unslicked||b.setPosition()},50))},b.prototype.removeSlide=b.prototype.slickRemove=function(a,b,c){var d=this;return"boolean"==typeof a?(b=a,a=b===!0?0:d.slideCount-1):a=b===!0?--a:a,d.slideCount<1||0>a||a>d.slideCount-1?!1:(d.unload(),c===!0?d.$slideTrack.children().remove():d.$slideTrack.children(this.options.slide).eq(a).remove(),d.$slides=d.$slideTrack.children(this.options.slide),d.$slideTrack.children(this.options.slide).detach(),d.$slideTrack.append(d.$slides),d.$slidesCache=d.$slides,void d.reinit())},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?Math.ceil(a)+"px":"0px",e="top"==b.positionProp?Math.ceil(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.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1&&a.options.variableWidth===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):a.options.variableWidth===!0?a.$slideTrack.width(5e3*a.slideCount):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.options.variableWidth===!1&&a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=b.slideWidth*d*-1,b.options.rtl===!0?a(e).css({position:"relative",right:c,top:0,zIndex:b.options.zIndex-2,opacity:0}):a(e).css({position:"relative",left:c,top:0,zIndex:b.options.zIndex-2,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:b.options.zIndex-1,opacity:1})},b.prototype.setHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.css("height",b)}},b.prototype.setOption=b.prototype.slickSetOption=function(b,c,d){var f,g,e=this;if("responsive"===b&&"array"===a.type(c))for(g in c)if("array"!==a.type(e.options.responsive))e.options.responsive=[c[g]];else{for(f=e.options.responsive.length-1;f>=0;)e.options.responsive[f].breakpoint===c[g].breakpoint&&e.options.responsive.splice(f,1),f--;e.options.responsive.push(c[g])}else e.options[b]=c;d===!0&&(e.unload(),e.reinit())},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.setHeight(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade(),a.$slider.trigger("setPosition",[a])},b.prototype.setProps=function(){var a=this,b=document.body.style;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==b.WebkitTransition||void 0!==b.MozTransition||void 0!==b.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),a.options.fade&&("number"==typeof a.options.zIndex?a.options.zIndex<3&&(a.options.zIndex=3):a.options.zIndex=a.defaults.zIndex),void 0!==b.OTransform&&(a.animType="OTransform",a.transformType="-o-transform",a.transitionType="OTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition",void 0===b.perspectiveProperty&&void 0===b.MozPerspective&&(a.animType=!1)),void 0!==b.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition",void 0===b.msTransform&&(a.animType=!1)),void 0!==b.transform&&a.animType!==!1&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=a.options.useTransform&&null!==a.animType&&a.animType!==!1},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;d=b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),b.$slides.eq(a).addClass("slick-current"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active").attr("aria-hidden","false"):(e=b.options.slidesToShow+a,d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),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").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-ab.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(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.setPaused=function(a){var b=this;b.options.autoplay===!0&&b.options.pauseOnHover===!0&&(b.paused=a,a?b.autoPlayClear():b.autoPlay())},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d); +}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay===!0&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},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?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"left":"right":"vertical"},b.prototype.swipeEnd=function(a){var c,b=this;if(b.dragging=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe)switch(b.swipeDirection()){case"left":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.slideHandler(c),b.currentDirection=0,b.touchObject={},b.$slider.trigger("swipe",[b,"left"]);break;case"right":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.slideHandler(c),b.currentDirection=1,b.touchObject={},b.$slider.trigger("swipe",[b,"right"])}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/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 d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.options.vertical===!1?b.swipeLeft=d+f*g:b.swipeLeft=d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):void 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,void(b.dragging=!0))},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),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.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.remove(),b.$nextArrow&&b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(a){var b=this;b.$slider.trigger("unslick",[b,a]),b.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&!a.options.infinite&&(a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;document[a.hidden]?(a.paused=!0,a.autoPlayClear()):a.options.autoplay===!0&&(a.paused=!1,a.autoPlay())},b.prototype.initADA=function(){var b=this;b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),b.$slideTrack.attr("role","listbox"),b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c){a(this).attr({role:"option","aria-describedby":"slick-slide"+b.instanceUid+c})}),null!==b.$dots&&b.$dots.attr("role","tablist").find("li").each(function(c){a(this).attr({role:"presentation","aria-selected":"false","aria-controls":"navigation"+b.instanceUid+c,id:"slick-slide"+b.instanceUid+c})}).first().attr("aria-selected","true").end().find("button").attr("role","button").end().closest("div").attr("role","toolbar"),b.activateADA()},b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.focusHandler=function(){var b=this;b.$slider.on("focus.slick blur.slick","*",function(c){c.stopImmediatePropagation();var d=a(this);setTimeout(function(){b.isPlay&&(d.is(":focus")?(b.autoPlayClear(),b.paused=!0):(b.paused=!1,b.autoPlay()))},0)})},a.fn.slick=function(){var f,g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length;for(f=0;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}}); +/* jshint ignore:end */ diff --git a/themes/example/lms/static/js/sticky.js b/themes/example/lms/static/js/sticky.js new file mode 100755 index 0000000000..02cab4c66f --- /dev/null +++ b/themes/example/lms/static/js/sticky.js @@ -0,0 +1,53 @@ + +/* jshint strict: false */ + +var $el = $('#sticky'), + stickyBarTop = $('#sticky').offset().top, + MIN_WEB_WIDTH = 768; + +$(document).ready(function() { + 'use strict'; + var makeSticky = function() { + $el.css({ + position: 'fixed', + top: 0, + width: '100%', + 'z-index': '10', + 'box-shadow': '0px 1px 5px rgba(0,0,0,0.5)' + }); + $('.sticky-course-title').removeClass('hidden'); + $('.course-run').addClass('hidden'); + }; + var removeSticky = function() { + $el.css({ + position: 'static', + 'z-index': '0', + 'box-shadow': 'none' + }); + $('.sticky-course-title').addClass('hidden'); + $('.course-run').removeClass('hidden'); + }; + var initializeSticky = function() { + var windowTop = ''; + if ($el.length) { // Element should exist + $(window).scroll(function() { + if ($(window).width() >= MIN_WEB_WIDTH) { + windowTop = $(window).scrollTop(); + if (stickyBarTop < windowTop) { + makeSticky(); + } else { + removeSticky(); + } + } + }); + } + }; + initializeSticky(); + $(window).resize(function() { + if ($(window).width() >= MIN_WEB_WIDTH) { + makeSticky(); + } else { + removeSticky(); + } + }); +}); diff --git a/themes/example/lms/static/sass/_accordion.scss b/themes/example/lms/static/sass/_accordion.scss new file mode 100644 index 0000000000..f0107fa73b --- /dev/null +++ b/themes/example/lms/static/sass/_accordion.scss @@ -0,0 +1,125 @@ +.tabcordion{ + padding: 1rem 0; + min-height: 500px; + margin: 1rem 0 0; + h2{ + font-size: 1.5rem; + color: $black; + letter-spacing: 0; + } + ul { + margin: 0; + padding: 0; + position: relative; + li { + list-style: none; + display: block; + margin-left: 0; + overflow: hidden; + margin-bottom: 3px; + vertical-align: top; + a { + border: 0; + background: #d2d0d0; + display: block; + padding: 1.25rem 2rem 1.25rem 1rem; + position: relative; + color: $black; + &:hover, &.active, &:focus { + color: $black; + } + &:after{ + content: "\f0da"; + position: absolute; + right: 20px; + top: 22px; + font-family: 'FontAwesome'; + font-size: 1.3rem; + color: #9b9b9b; + } + &.active{ + &:after{ + content: "\f0dd"; + top: 18px; + } + } + } + ul { + li { + a { + padding: 10px 25px; + border-bottom: 1px dotted #ccc; + } + } + } + &:first-child{ + margin-left: 0; + a{ + padding-left: 1rem; + } + } + } + section { + display: none; /* I NEED TO FIX THIS */ + float: left; + overflow: hidden; + padding: 1rem; + background-color: transparent; + p{ + line-height: 1.75rem; + } + } + } +} + +@media only screen and (min-width: 30em) { + .tabcordion { + ul { + position: relative; + border: none; + li { + display: inline-block; + margin-left: -4px; + margin-bottom: 0; + a { + display: inline-block; + padding: 1.25rem 1rem; + text-decoration: none; + background-color: transparent; + color: $brand-color; + font-size: 1.1rem; + z-index: 1; + position: relative; + &:hover, &.active { + color: $black; + border-bottom: 5px solid $brand-color; + &:after{ + content: ""; + display: none; + } + } + &:after{ + content: ""; + display: none; + } + } + &:first-child{ + margin-left: -4px; + display: inline-block; + a{ + padding-left: 0; + } + } + } + section { + padding: 2% 0; + position: absolute; + top: 42px; + left: 0; + border-top: 5px solid $dark; + margin-top: 14px; + z-index: 0; + } + } + } +} diff --git a/themes/example/lms/static/sass/_overrides.scss b/themes/example/lms/static/sass/_overrides.scss new file mode 100644 index 0000000000..30a5bbb19b --- /dev/null +++ b/themes/example/lms/static/sass/_overrides.scss @@ -0,0 +1,1457 @@ +body{ + background-color: $body-background-color !important; + *{ + &:focus{ + outline: 0; + } + } + .content-wrapper{ + max-width: none; + } +} +//Helper Classes + +.pull-left{ + float: left !important; +} +.pull-right{ + float: right !important; +} +.block{ + display: block; +} +img{ + max-width: 100%; +} +a{ + &:hover{ + text-decoration: none; + opacity: 0.8; + } + &:focus{ + text-decoration: none; + outline: none; + } + &.brand-link{ + color: $brand-color !important; + } +} +#success-message{ + padding: 0; + .alert { + min-width: 0; + border-left-width: 0; + border-right-width: 0; + border-bottom-width: 0; + box-shadow: none; + } +} +.grid-container{ + padding: 0 1rem; +} +.show-user-menu{ + display: block !important; +} + +.hidden-mobile{ + display: none; +} +.visible-mobile{ + display: block; +} +.light-bg{ + background-color: $course-section-background-color; +} +.btn-client{ + background-color: $brand-color !important; + border-color: $brand-color !important; + font-weight: normal !important; + box-shadow: none !important; + color: $white !important; + text-shadow: none !important; + &:hover{ + background-color: lighten($brand-color, 10%) !important; + background-image: none !important; + } + &.btn-elevated{ + box-shadow: inset 0 -3px 0 0 darken($brand-color, 15%) !important; + } +} +.btn-success{ + background-color: $success-base !important; + color: $white !important; + border-color: $success-base; + &:hover{ + background-color: lighten($success-base, 10%) !important; + } +} +.btn-block{ + width: 100% !important; +} +.inner-container{ + padding: 0 1.25rem; +} +h2{ + font-size: 1.5rem; + font-family: $brand-font; + margin: 1.25rem 0; + text-transform: none; +} +h1, h2, h3, h4, h5, h6{ + font-family: $brand-font; +} +.col-centered{ + float: none !important; + margin-left: auto !important; + margin-right: auto !important; +} +.input-group{ + margin-bottom: 1.25rem; +} +.text-light{ + color: $base !important; +} +.input-lg{ + line-height: 55px !important; + height: 55px !important; + padding: 0 1.25rem !important; +} +.form-block{ + label, input, select, button, textarea{ + display: block; + width: 100%; + font-family: $brand-font; + font-style: normal; + margin-bottom: 0.5rem !important; + &.has-error{ + border-color: $error-base; + border-radius: 4px 4px 0 0; + margin-bottom: 0 !important; + + .field-message{ + border-radius: 0 0 4px 4px; + width: 100%; + } + } + } + input{ + box-shadow: none; + border: 1px solid $light; + border-radius: 4px; + font-size: 1rem; + width: 100%; + &:focus, &:active{ + box-shadow: none; + border-color: $dark; + } + } + select{ + -webkit-appearance: none; + -moz-appearance: none; + border-color: $light; + appearance: none; + &::-ms-expand{ + display: none; + } + } + .custom-select{ + position: relative; + select{ + padding-right: 3rem !important; + } + &:after{ + content: "\f0da"; + position: absolute; + right: 20px; + top: 20px; + font-family: 'FontAwesome'; + font-size: 1.3rem; + color: $base; + } + } + textarea{ + height: 280px; + border-color: $light; + box-shadow: none; + resize: none; + padding: 1rem; + } + button{ + margin-top: 2.5rem; + padding: 1.25rem; + } +} + +.list-bulleted{ + li{ + margin-bottom: 0.2rem !important; + padding-left: 0.5rem !important; + line-height: 1.5rem; + .brand-link{ + display: inline; + } + } +} + +.btn-enroll-mobile{ + margin-bottom: 2rem; + .btn-enroll{ + max-width: 95%; + margin: auto; + border-radius: 3px; + } +} + +//Modals +.modal { + border-radius: 0px !important; + background: #FFFFFF !important; + + .inner-wrapper { + padding: 0px !important; + border: none !important; + } +} +.modal-custom { + width: 320px; + background-color: $white; + padding: 30px 30px; + position: fixed !important; + overflow: auto; + overflow-x: hidden; + top: 10%; + bottom: 10%; + left: calc(50% - 160px) !important; + margin-left: 0 !important; + z-index: 999; + .btn-close { + position: absolute !important; + right: 20px !important; + top: 20px !important; + cursor: pointer; + .fa { + font-size: 1.75em; + color: $x-dark; + } + } + &.custom-video-modal { + padding: 10px; + max-height: 360px; + .inner-wrapper, iframe { + height: 100%; + width: 100%; + } + } + .modal-body{ + overflow: hidden !important; + position: relative !important; + width: 100%; + .modal-header{ + display: block; + width: 100%; + margin-bottom: 2rem !important; + margin-left: 0 !important; + margin-right: 0 !important; + .instructor-data{ + display: block; + .thumbnail{ + display: block; + width: 100%; + padding-bottom: 0; + img{ + border-radius: 50%; + border: 5px solid $light; + margin-bottom: 1rem; + } + } + h3{ + display: block; + width: 100%; + vertical-align: middle; + font-size: 1.5em; + line-height: normal; + color:$black; + margin-bottom: 0; + span{ + display: block; + font-size: 1rem; + line-height: 1.1rem; + color: $x-dark; + &:last-child{ + color: $dark; + font-size: .8rem; + line-height: 1.1rem; + margin-top: 5px; + } + } + } + } + } + .instructor-bio{ + line-height: 1.5rem; + margin-bottom: 2rem; + color: $x-dark; + margin: 0 !important; + font-size: 1rem; + color: $dark; + } + .links{ + a{ + margin-right: 0; + display: block; + margin-bottom: 0.5rem; + } + } + } + } + + + +//Header +header.header-main { + min-height: 100px; + .navbar-collapse{ + .collapsed-button{ + position: absolute; + right: 20px; + top: 38px; + cursor: pointer; + float: right; + span{ + display: block; + width: 25px; + height:4px; + background-color: $x-dark; + margin-bottom: 3px; + } + } + ul{ + display: none; + &.show-menu{ + display: block; + } + + .language-selection { + display: inline-block; + position: relative; + } + + .language-selection select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: transparent; + border: 0; + color: $brand-color; + font-family: $brand-font; + font-weight: 400; + font-style: normal; + padding: 0 20px; + position: relative; + z-index: 1; + } + + .language-selection select::ms-expand { + display: none; + } + + .language-selection .fa-globe { + position: absolute; + z-index: 0; + top: 4px; + left: 2px; + color: #8d1221; + } + + .language-selection .fa-angle-down { + position: absolute; + right: 5px; + top: 4px; + color: #8d1221; + } + } + } + + .logo{ + line-height: 94px; + margin-left: 0; + a{ + border-bottom: 0 !important; + img{ + vertical-align: middle; + width: auto; + height: auto; + } + } + } + .list-inline{ + transition: all .2s; + position: absolute; + top: 100px; + border-top: 1px solid $light; + right: 0; + left: 0; + background-color: $white; + z-index: 10; + box-shadow: 0px 2px 3px $light; + padding: 1rem 0; + li{ + float: right; + display: inline-block; + vertical-align: middle; + line-height: normal; + padding: 0.5rem; + font-size: 1rem; + width: 100%; + text-align: center; + a{ + line-height: normal; + color: $x-dark; + } + &.user-account{ + margin-right: 1rem; + position: relative; + .user-img{ + display: inline-block; + width: 50px; + height: 50px; + line-height: 100px; + vertical-align: middle; + margin-right: 0.6rem; + img { + vertical-align: top; + width: 100%; + } + } + .user-name{ + cursor: pointer; + position: relative; + display: inline-block; + &:after{ + content: "\f0d7"; + position: absolute; + right: -1rem; + font-family: 'FontAwesome'; + top: 0.2rem; + } + } + ul{ + display: none; + position: relative; + background-color: $white; + box-shadow: 0px 2px 24px rgba(0,0,0,0.3); + width: 50%; + margin: auto; + margin-top: 0.5rem; + border: 1px solid $light; + li{ + border-bottom: 1px solid lighten($light, 10%); + background: $white; + float: none; + a{ + display: block; + } + } + &:before{ + content: "\f0d8"; + position: absolute; + font-family: 'FontAwesome'; + right: 1rem; + top: -20px; + color: $white; + font-size: 2rem; + line-height: normal; + } + } + } + } + } +} + +//Hero + +.hero { + min-height: 22em; + position: relative; + z-index: 0; + background-size: cover !important; + .tint-dark { + min-height: 22em; + max-height: 350px; + background: -moz-linear-gradient(left, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to right, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#a6000000', endColorstr='#00000000', GradientType=1); /* IE6-9 */ + .grid-manual { + position: relative; + .text-tint { + position: absolute; + top: 0; + bottom: 0; + height: 352px; + display: flex; + align-items: center; + p { + font-size: 1.5rem; + color: $white; + line-height: 1.5em; + span { + display: block; + font-size: 1rem; + } + .btn-neutral { + border-color: $white; + padding: 0.8em 2em; + color: $white; + margin-left: 2px; + font-weight: normal; + background-color: transparent; + i.fa { + font-size: 0.6em; + margin-left: 1.5em; + vertical-align: middle; + margin-top: 1px; + } + &:hover{ + text-decoration: none; + } + } + } + &.small{ + height: 250px; + } + } + } + &.no-background-mobile{ + background: none; + } + } + &.hero-main{ + background: url("../images/hero-home-page.png") no-repeat top center !important; + background-size: cover !important; + } + &.hero-catalog{ + background: url("../images/hero-course-catalog.jpg") no-repeat top center !important; + background-size: cover !important; + } + &.hero-video{ + background: none; + + .hero-image { + display: none; + position: absolute; + right: 0; + left: 0; + min-height: 22em; + } + + .grid-container{ + .row{ + height: auto; + .description{ + .data{ + padding: 7% 0 0 0; + h1{ + font-size: 1.5rem; + color: $black; + line-height: normal; + padding-left: 1rem; + text-align: left; + span{ + display: block; + } + } + p{ + font-size: 1rem; + padding-left: 1rem; + color: $x-dark; + line-height: normal; + margin-top: 1.2rem; + padding-bottom: 2rem; + } + } + } + .video{ + float: none; + .video-data{ + position: relative; + text-align: center; + line-height: normal; + max-width: none; + img{ + border: 0; + width: 100%; + } + .play-btn{ + content: ""; + background: url("../images/vid-btn.png") no-repeat center center; + width: 80px; + height: 80px; + position: absolute; + left: calc(50% - 40px); + top: calc(50% - 40px); + z-index: 1; + } + } + } + } + } + } + &.hero-small { + min-height: 15.625rem; + .tint-dark{ + min-height: 15.625rem; + } + } +} + +//Courses +.courses-section { + background-color: $course-section-background-color; + .courses-container { + max-width: 1128px; + padding: 0 1.04167%; + .highlighted-courses { + .courses { + float: none; + padding: 1.5rem 0; + h2{ + .course-list-heading{ + font-size: 1.5rem; + } + } + .course-title{ + color: $brand-color; + font-size: 1.25rem; + padding: 0 1.25rem; + margin: 5px 0; + max-height: 72px; + overflow: hidden; + } + .course-list{ + padding: 1.5rem 0; + .courses-listing-item{ + padding: 0 5%; + .cover-image{ + height: 176px; + &:before{ + height: 176px; + } + .learn-more{ + top: 62px; + } + } + .course-info{ + height: 165px; + .course-organization{ + padding: 5px 20px; + font-size: 1rem; + color: $x-dark; + } + .course-date{ + color: $base; + font-size: 1rem; + padding: 0 1.25rem; + span{ + display: block; + color: $x-dark; + } + } + } + .course{ + border: 0; + box-shadow: none; + background-color: $white; + border-bottom: 6px solid $brand-color; + } + } + } + } + } + } +} + +//About + +.about-container{ + max-width: 70.5em; + padding: 1.5em 1.04167% 3em; + margin-left: auto; + margin-right: auto; + .about-list{ + padding: 1.5rem 0; + .about-icon{ + img{ + width: 150px; + } + span{ + font-weight: bold; + } + } + p{ + padding: 1.25rem 1.25rem 0; + line-height: 1.4em; + font-size: 1rem; + color: $x-dark; + span{ + display: block; + } + } + &.slidable { + .slick-arrow{ + position: absolute; + background-color: $brand-color; + width: 40px; + height: 60px; + z-index: 1; + text-align: center; + line-height: 60px; + color: $white; + font-size: 2rem; + top: 65px; + cursor: pointer; + &[class*="left"]{ + left: 0; + border-radius: 0 2px 2px 0; + } + &[class*="right"]{ + right: 0; + border-radius: 2px 0 0 2px; + } + } + .slick-slide img { + display: inline-block; + } + *:focus, *:active{ + outline: none; + } + } + } + .btn-neutral{ + border-color: $brand-color; + color: $brand-color; + &:hover{ + background-color: $brand-color; + color: $white; + } + } +} + +//About Us +.main-heading { + background-color: red; + height: 70px; + margin-bottom: 20px; +} +.message-image { + border: 3px solid gray; + border-radius: 50%; +} + +//Testimonials +.testimonial-main{ + padding: 1.5em 1.04167%; + background-color: $course-section-background-color; + .grid-manual{ + max-width: 70.5em; + margin-left: auto; + margin-right: auto; + padding: 1.5em 1.04167%; + } + p{ + line-height: 1.5em; + text-align: center; + &:last-child{ + margin-bottom: 0; + } + } + img{ + margin-bottom: 1.25rem; + } +} + +//Course Details + +.course-info{ + .course-detail{ + clear: both; + .inner-container{ + padding: 1.8rem 1.25rem; + .sticky-course-title{ + line-height: 1.5rem; + height: 45px; + display: flex; + align-items: center; + margin-top: 0; + word-break: break-word; + } + } + [class*="col"]{ + padding-top: 0.5rem; + margin-bottom: 1rem; + span{ + display: block; + color: $black; + font-size: 1.25rem; + margin-top: .4rem; + } + &:last-child{ + padding-top: 0; + } + } + .btn-enroll{ + border-radius: 3px; + text-align: center; + margin-top: 1rem; + padding: 1rem 1.875rem !important; + } + } + .description-container{ + padding: 0.5rem 0; + .learning-points-btn{ + display: block; + padding: 1rem 0.6rem; + } + h2{ + color: $black; + font-size: 1.25rem; + } + p{ + line-height: 1.5rem; + margin-bottom: 1rem; + } + ul{ + margin-left: 2rem; + li{ + margin-bottom: 0.8rem; + padding-left: 0.5rem; + } + } + .extras{ + margin-top: 1.5rem; + h3{ + font-size: 0.9rem; + } + .sponsored-logo{ + margin-bottom: 3rem; + } + .social-icons{ + margin-bottom: 3rem; + margin-left: 0; + overflow: hidden; + li{ + list-style-type: none; + padding-left: 0.5rem !important; + float: left; + .icon{ + background-color: $brand-color; + border-radius: 50%; + text-align: center; + width: 50px; + height: 50px; + line-height: 60px; + .fa{ + color: $white; + font-size: 1.9rem; + &.fa-google-plus{ + line-height: 54px; + } + } + } + } + } + .course-features{ + margin-top: 2rem; + background-color: #fafafa; + padding: 2rem; + border-radius: 10px; + font-size: 1rem; + .row{ + padding: .8rem 0; + border-bottom: 1px solid $light; + &:last-child{ + border-bottom: 0; + } + } + &.group-purchase{ + h2{ + margin-top: 0; + } + a.btn-enroll{ + border-radius: 3px; + padding: 1rem; + text-align: center; + margin-bottom: 1rem; + } + } + } + } + .instructors{ + display: table; + width: 100%; + + .modal { + .btn-close { + position: relative; + top: -30px; + right: -30px; + float: right; + z-index: 11000; + color: #FFFFFF; + cursor: pointer; + } + + .modal-body { + position: absolute; + overflow: scroll; + top: 5%; + bottom: 5%; + font-size: 14px; + line-height: 20px; + + & > div { + margin: 0 20px; + } + } + } + + [class*="col"]{ + display: table-row; + .thumbnail{ + display: table-cell; + vertical-align: middle; + margin-right: 1.3rem; + padding-bottom: 1.5rem; + width: 120px; + img { + border-radius: 50%; + border: 6px solid #D3D3D3; + } + } + p{ + display: table-cell; + vertical-align: middle; + margin-bottom: 0; + margin-top: 0; + color: $brand-color; + line-height: 1rem; + padding-left: 1.3rem; + padding-bottom: 1.5rem; + font-size: 0.8rem; + span{ + display: block; + color: $dark; + margin-top: 0.6rem; + &.organization { + font-weight: bold; + } + } + } + } + } + } +} + +// Profile page + +.account-settings-container { + .wrapper-profile-section-two { + margin-bottom: 5rem; + } +} + +.view-profile { + .profile-image-field { + .image-wrapper { + .upload-button-input{ + top: 0; + opacity: 0; + } + } + } +} + +// Static pages + +.page-heading{ + height: 110px; + background: url("../images/page-heading.jpg") center center no-repeat; + background-size: cover; + h1{ + background-color: rgba($brand-color , 0.7); + text-align: center; + line-height: 110px; + color: $white; + font-size: 1.5rem; + margin: 0; + } +} +.static-content{ + padding: 3rem 0; + h1{ + font-size: 1.5rem; + margin-top: 1rem; + color: $black; + text-align: left; + letter-spacing: 0; + } + .honor-code-heading{ + text-align: center !important; + } + h2{ + font-size: 1.25rem; + color: $black; + line-height: 1.6rem; + text-transform: uppercase; + } + h3{ + font-size: 1rem; + color: $black; + line-height: 1.6rem; + text-transform: uppercase; + } + .brand-link{ + display: block; + margin: 2rem 0; + } + p{ + margin-top: 1rem; + margin-bottom: 2rem; + color: $dark; + line-height: 1.5rem; + .brand-link { + display: inline; + margin: 0; + } + } + .mission-statement{ + margin-top: 1rem; + img { + border-radius: 50%; + border: 6px solid #D3D3D3; + width: 120px; + } + p{ + font-size: 1.05rem; + } + h3{ + font-size: 1rem; + color: $black; + span{ + color: $dark; + display: block; + } + } + } + hr{ + border-top: 3px solid $course-section-background-color; + margin-bottom: 4rem; + } + .edx-intro{ + p{ + margin-top: 2.5rem; + } + } + .bordered-list{ + margin: 0.5rem 0 2rem; + li{ + list-style-type: none; + margin-bottom: 0; + border-bottom: 2px solid $course-section-background-color; + a{ + padding: 0.8rem 0.5rem 0.8rem 0; + line-height: 1.5rem; + color: $brand-color; + font-size: 1rem; + display: inline-block; + word-break: break-word; + } + } + } + .list-divided { + text-transform: capitalize; + margin-bottom: 2rem !important; + .brand-link{ + display: inline; + line-height: 1.4rem; + } + } + .response { + .question{ + color: $brand-color; + cursor: pointer; + } + .answer { + overflow: hidden; + display: none; + } + } + #list-bulleted{ + margin-bottom: 2rem; + li{ + line-height: 1.5rem; + } + .brand-link{ + display: inline; + } + } +} + +//Footer + +.footer-main{ + padding: 2em 0; + border-top: 3px solid $course-section-background-color; + .logo{ + margin-bottom: 1em; + } + ul{ + list-style: none; + margin-left: 1.5em; + li{ + color: $dark; + padding: .3em 0; + a{ + font-size: 1em; + color: $dark !important; + &:hover{ + color: $dark !important; + text-decoration: none; + } + } + &:first-child{ + font-weight:bold; + } + &:last-child{ + margin-bottom: 2em; + } + } + } + .footer-logo{ + text-align: center; + img{ + margin-bottom: 1.5rem; + width: auto; + height: 44px; + } + } + .open-edx-logo{ + ul{ + li{ + text-align: left; + img{ + max-width: 80%; + } + } + } + } +} + +// Shopping Cart + +%shopping_cart_btn { + background: $brand-color !important; + border-color: $brand-color !important; + box-shadow: none; + font-weight: normal; + text-shadow: none; +} + +.shopping-cart { + .discount button.blue { + @extend %shopping_cart_btn; + } + div[name='billing'] button[name='billing-details'] { + @extend %shopping_cart_btn; + } + form button[type='submit'] { + @extend %shopping_cart_btn; + } + a.blue { + @extend %shopping_cart_btn; + } +} + +// Dashboard + +.dashboard { + .wrapper-action-more { + width: inherit; + } + .wrapper-find-courses { + margin-top: 66px; + } +} + +// Courseware + +.view-in-course { + .home { + box-sizing: content-box; + } + .course-tabs { + li { + margin-bottom: 0; + } + } + #content { + padding-bottom: 60px; + } + section.wiki .wiki-wrapper>header { + box-sizing: content-box; + } +} + +.discussion { + #content { + padding-bottom: 60px; + } +} + +//Media Queries + +@media screen and (min-width: 30em){ + .hero{ + .tint-dark { + .grid-manual { + .text-tint { + .btn-neutral { + padding: 0.8em 2em; + } + } + } + } + } + .courses-section { + .courses-container { + .highlighted-courses { + .courses { + .course-info{ + height: 165px; + } + .course-list{ + .courses-listing-item{ + padding: 0; + } + } + + } + } + } + } + .footer-main{ + .footer-logo{ + text-align: center; + } + } + .visible-mobile{ + display: none; + } + .hidden-mobile{ + display: block; + } + .testimonial-main{ + p{ + text-align: left; + } + img{ + margin-bottom: 0; + } + } +} + +@media screen and (min-width: 48em){ + .btn-enroll-mobile{ + display: none; + } + header.header-main{ + .logo a img { + height: 44px; + } + .collapsed-button{ + display: none; + } + .navbar-collapse{ + ul{ + display: block; + transition: all .2s; + position: relative; + top: inherit; + right: inherit; + left: inherit; + border-top: 0; + background-color: transparent; + box-shadow: none; + padding: 0; + li{ + width: auto; + text-align: left; + line-height: 100px; + padding: 0 0.9rem; + a{ + &.btn-neutral{ + padding: 0.625rem 1.25rem; + } + } + &.user-account{ + ul{ + position: absolute; + right: 1rem; + top: 100%; + width: 100%; + margin-top: -1rem; + li{ + display: block; + float: none; + line-height: normal; + a{ + padding: 0.5rem; + display: inline-block; + } + } + } + } + } + } + } + } + .footer-main{ + .footer-logo{ + text-align: left; + } + .open-edx-logo{ + ul{ + li{ + text-align: right; + img{ + max-width: 80%; + } + } + } + } + } + .hero { + .tint-dark { + .grid-manual { + .text-tint { + p { + font-size: 40px; + span { + display: block; + font-size: 1.5rem; + } + } + } + } + } + &.hero-video{ + background: rgba(0,0,0,0.6); + .hero-image { + display: block; + background-size: cover !important; + } + .tint-dark { + background: -moz-linear-gradient(left, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to right, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#a6000000', endColorstr='#00000000', GradientType=1); /* IE6-9 */ + } + .grid-container{ + .row{ + height: 22rem; + .description{ + .data{ + padding: 11.5% 2% 0 0; + h1{ + color: $white; + font-size: 2.5rem; + } + p{ + color: $white; + font-size: 1.3rem; + } + } + } + .video{ + float: right; + .video-data{ + line-height: 352px; + max-width: 95%; + img{ + border: 3px solid $white; + width: auto; + } + } + } + } + } + } + } + .course-info { + .course-detail { + [class*="col"] { + margin-bottom: 0; + } + .btn-enroll{ + margin-top: 0; + } + } + .description-container{ + .expandable{ + max-height: 224px; + } + } + } + .modal-custom{ + display:none; + width: 540px; + padding: 30px 30px; + left: calc(50% - 270px) !important; + .modal-body{ + .modal-header{ + display: table; + width: 100%; + .instructor-data{ + display: table-row; + .thumbnail{ + display: table-cell; + width: 25%; + padding-bottom: 0; + img{ + margin-bottom: 0; + } + } + h3{ + display: table-cell; + width: 65%; + padding: 1rem; + } + } + } + + .links{ + a{ + margin-right: 1.5rem; + display: inline-block; + margin-bottom: 0; + } + } + } + } + +} + +@media screen and (min-width: 64em){ /* 980px */ + .footer-main { + .footer-logo { + text-align: left; + } + } +} + +@media screen and (min-width: 80em){ + .footer-main { + .footer-logo { + text-align: left; + } + } +} diff --git a/themes/example/lms/static/sass/base/_variables.scss b/themes/example/lms/static/sass/base/_variables.scss new file mode 100755 index 0000000000..acaf7ae92a --- /dev/null +++ b/themes/example/lms/static/sass/base/_variables.scss @@ -0,0 +1,19 @@ +@import 'lms/static/sass/partials/base/variables'; + +$white: #ffffff; +$body-background-color: $white; +$x-dark: #34383a; +$light: #d2d0d0; +$dark: #6b6969; +$course-section-background-color: #f7f7f7; +$brand-color: $dark;; +$base: #9b9b9b; +$success-base: #25b85a; +$error-base: #b20610; +$brand-font: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif; +$action-primary-fg: $brand-color; +$action-primary-bg: lighten($brand-color, 10%); +$action-primary-shadow: $brand-color !default; +$link-color: $brand-color !default; + + diff --git a/themes/example/lms/static/sass/lms-main-v1.scss b/themes/example/lms/static/sass/lms-main-v1.scss new file mode 100644 index 0000000000..ca36fb3acb --- /dev/null +++ b/themes/example/lms/static/sass/lms-main-v1.scss @@ -0,0 +1,21 @@ +// LMS - CSS application architecture +// Version 1 styling (pre-Pattern Library) +// ==================== + +// libs and resets *do not edit* +@import 'bourbon/bourbon'; // lib - bourbon +@import 'vendor/bi-app/bi-app-ltr'; // set the layout for left to right languages + +// BASE *default edX offerings* +// ==================== + +// base - utilities +@import 'base/reset'; +@import 'base/variables'; +@import 'base/mixins'; + +// This comment is used by preprocess_assets.py to include resources from a +// theme, for old-style deprecated theming. +// + +@import 'build-lms-v1'; // shared app style assets/rendering diff --git a/themes/example/lms/static/sass/lms-main-v2.scss b/themes/example/lms/static/sass/lms-main-v2.scss new file mode 100644 index 0000000000..10fedb4692 --- /dev/null +++ b/themes/example/lms/static/sass/lms-main-v2.scss @@ -0,0 +1,21 @@ +// ------------------------------ +// LMS main styling +// Version 2 - introduces the Pattern Library + +// NOTE: This is the left-to-right (LTR) configured style compile. +// It should mirror lms-main-v2-rtl w/ the exception of bi-app references. + + +// Load the LTR version of the edX Pattern Library +$pattern-library-path: '../../edx-pattern-library' !default; +@import 'edx-pattern-library/pattern-library/sass/edx-pattern-library-ltr'; + +// base - utilities +@import 'base/variables'; + +// Load the shared build +@import 'build-lms-v2'; + +// Load overrides +@import "overrides"; +@import "accordion"; diff --git a/themes/example/lms/static/sass/slick.scss b/themes/example/lms/static/sass/slick.scss new file mode 100755 index 0000000000..3e1bc6a8a7 --- /dev/null +++ b/themes/example/lms/static/sass/slick.scss @@ -0,0 +1,99 @@ +/* Slider */ + +.slick-slider { + position: relative; + display: block; + -moz-box-sizing: border-box; + 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: pan-y; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; +} +.slick-list { + position: relative; + overflow: hidden; + display: block; + margin: 0; + padding: 0; + + &:focus { + outline: none; + } + + &.dragging { + cursor: pointer; + cursor: hand; + } +} +.slick-slider .slick-track, +.slick-slider .slick-list { + -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; + + &:before, + &:after { + content: ""; + display: table; + } + + &:after { + clear: both; + } + + .slick-loading & { + visibility: hidden; + } +} +.slick-slide { + float: left; + height: 100%; + min-height: 1px; + [dir="rtl"] & { + float: right; + } + img { + display: block; + } + &.slick-loading img { + display: none; + } + + 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; + } +} +.slick-arrow.slick-hidden { + display: none; +} diff --git a/themes/example/lms/templates/about_site.html b/themes/example/lms/templates/about_site.html new file mode 100644 index 0000000000..6fcf38927b --- /dev/null +++ b/themes/example/lms/templates/about_site.html @@ -0,0 +1,51 @@ +## mako +<%page expression_filter="h"/> +<%namespace name='static' file='static_content.html'/> + + + + diff --git a/themes/example/lms/templates/course.html b/themes/example/lms/templates/course.html new file mode 100644 index 0000000000..c68f72ff2f --- /dev/null +++ b/themes/example/lms/templates/course.html @@ -0,0 +1,31 @@ +## mako +<%namespace name='static' file='static_content.html'/> +<%! +from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse +%> +<%page args="course" expression_filter="h"/> + diff --git a/themes/example/lms/templates/courses_list.html b/themes/example/lms/templates/courses_list.html new file mode 100644 index 0000000000..e8375cf653 --- /dev/null +++ b/themes/example/lms/templates/courses_list.html @@ -0,0 +1,37 @@ +## mako +<%page expression_filter="h"/> +<%namespace name='static' file='static_content.html'/> +<%! from django.utils.translation import ugettext as _ %> + +
+
+
+ + % if settings.FEATURES.get('COURSES_ARE_BROWSABLE'): +
+ +
+
+
+

+ Lorem ipsum dolor sit amet +

+
+
+ +
+ %for course in courses[:6]: +
+
+ <%include file="course.html" args="course=course" /> +
+
+ %endfor +
+
+
+ % endif + +
+
+
diff --git a/themes/example/lms/templates/courseware/course_about.html b/themes/example/lms/templates/courseware/course_about.html new file mode 100644 index 0000000000..cc55782851 --- /dev/null +++ b/themes/example/lms/templates/courseware/course_about.html @@ -0,0 +1,428 @@ +## mako +<%page expression_filter="h"/> +<%namespace name='static' file='../static_content.html'/> +<%! +from itertools import izip_longest +from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse +from courseware.courses import get_course_about_section +from django.conf import settings +from edxmako.shortcuts import marketing_link +from openedx.core.lib.courses import course_image_url +from openedx.core.djangolib.markup import HTML, Text +from openedx.core.djangolib.js_utils import js_escaped_string + +%> + +<%inherit file="../main.html" /> +<%block name="headextra"> + + ## OG (Open Graph) title and description added below to give social media info to display + ## (https://developers.facebook.com/docs/opengraph/howtos/maximizing-distribution-media-content#tags) + + + + + +<%block name="js_extra"> + ## CourseTalk widget js script + % if show_coursetalk_widget: + + % endif + + + + + <%include file="../about_site.html" /> + + + + + +<%block name="pagetitle">${course.display_name_with_default} + +
+
+
+
+
+
+
+
+
+ +
+
+
+

${course_details.title or course.display_name}

+

${course_details.subtitle}

+
+
+
+
+
+
+
+
+
+
+ +
+ Start Date: + ${course_details.start_date.strftime('%b %-d, %Y')} +
+
+ Duration: + ${course_details.duration} +
+ +
+ Price: + ${course_price} +
+ <% + btn_text = 'Enroll Now' + btn_href = '#' + btn_class = '' + btn_class_bulk = '' + btn_id = '' + %> + + % if user.is_authenticated() and registered: + <% + btn_text = "You are enrolled in this course" + btn_class = "disabled" + %> + + % elif in_cart: + <% + btn_text = "This course is in your cart" + btn_href = cart_link + %> + + % elif is_course_full: + <% + btn_text = "Course is full" + btn_class = "disabled" + btn_class_bulk = btn_class + %> + + % elif invitation_only and not can_enroll: + <% + btn_text = "Enrollment in this course is by invitation only" + btn_class = "disabled" + btn_class_bulk = btn_class + %> + + % elif not is_shib_course and not can_enroll: + <% + btn_text = "Enrollment is Closed" + btn_class = "disabled" + btn_class_bulk = btn_class + %> + + % elif can_add_course_to_cart: + <% + btn_class = "add-to-cart" + btn_text = "Enroll Now" + %> + + % if user.is_authenticated(): + % if user.is_active: + <% + btn_href = "#" + btn_id = "add_to_cart_post" + %> + % else: + <% + btn_text = "Please Activate Your Account" + btn_class = "disabled" + %> + % endif + % else: + <% + btn_href = reg_then_add_to_cart_link + btn_id = "reg_then_add_to_cart" + %> + % endif + + % if ecommerce_checkout and ecommerce_checkout_link and user.is_authenticated(): + <% + btn_href = ecommerce_checkout_link + %> + % endif + + % else: + % if ecommerce_checkout: + % if ecommerce_checkout_link: + <% btn_href = ecommerce_checkout_link %> + % else: + <% btn_href="#" %> + % endif + % if professional_mode: + % if user.is_authenticated(): + <% btn_class = "add-to-cart" %> + % else: + <% + btn_class = "register" + btn_class_bulk = btn_class + %> + % endif + % endif + % endif + % endif + +
+
+
+
+
+
+
+
+
+ +

Course Description

+
+

${course_details.description}

+
+ +

What you'll learn

+
+
    + % for item in course_details.learning_info: +
  • ${item}
  • + %endfor +
+
+
+ % if can_enroll and not is_course_full: +
+
+

${_("Want to purchase this course for a group?")}

+

${_("You can purchase enrollment codes for this course to distribute to your team")}

+ + % if ecommerce_bulk_checkout_link: + <% + url = "mailto:harvardxplus@harvard.edu?Subject={course_id}%20{run}%20Bulk%20Discount".format(course_id=course_details.course_id, run=course_details.run) + link_start = HTML("").format(url=Text(url)) + %> + ${_("Purchase for a Group")} +

+ ${Text(_("Bulk discounts may apply for groups larger than 10. Contact {link_start}harvardxplus@harvard.edu{link_end} for more information.")).format( + link_start=HTML(link_start), + link_end=HTML('') + )} +

+ % else: + <% + url = "mailto:harvardxplus@harvard.edu?Subject={course_id}%20{run}%20Group%20Purchase".format( + course_id=course_details.course_id, run=course_details.run) + %> + ${_("Email Us")} + % endif +
+
+ % endif +
+

Instructors

+ <% index = 0 %> + % for instructors in izip_longest(*([iter(course_details.instructor_info['instructors'])] * 2)): +
+ % for instructor in [i for i in instructors if i is not None]: + <% index += 1 %> +
+
+ ${instructor['name']} +
+

${instructor['name']} ${instructor['title']}

+ +
+ % endfor +
+ % endfor +
+
+
+
+
+
+
+
+ ${HTML(course_details.overview)} +
+
+
+
+
+
+ +
+
+ +
+ +## Need to put this hidden form on the page so that the registration button works. +## Since it's no harm to display a hidden form, we display it with the most permissive conditional +## which is when the student is not registered. +%if active_reg_button or is_shib_course: +
+
+
+ ${_("Enroll")} + + +
+
+ +
+
+
+%endif + +% if course_details.intro_video and course_details.video_thumbnail_image_name: + +% endif diff --git a/themes/example/lms/templates/courseware/courses.html b/themes/example/lms/templates/courseware/courses.html new file mode 100644 index 0000000000..8f1ca44206 --- /dev/null +++ b/themes/example/lms/templates/courseware/courses.html @@ -0,0 +1,49 @@ +## mako +<%page expression_filter="h"/> +<%! from django.utils.translation import ugettext as _ %> +<%inherit file="../main.html" /> +<%namespace name='static' file='../static_content.html'/> + +
+
+
+
+
+
+

Lorem ipsum dolor sit amet, sea te quaeque suscipiantur.

+
+
+
+
+
+ +
+
+
+
+
+ +
+
+

+ ${_('Lorem ipsum dolor sit amet.')} +

+
+
+ +
+ %for course in courses: +
+
+ <%include file="../course.html" args="course=course"/> +
+
+ %endfor +
+ +
+
+
+
+
+
diff --git a/themes/example/lms/templates/footer.html b/themes/example/lms/templates/footer.html new file mode 100644 index 0000000000..502b046797 --- /dev/null +++ b/themes/example/lms/templates/footer.html @@ -0,0 +1,58 @@ +## mako +<%page expression_filter="h"/> +<%namespace name='static' file='static_content.html'/> + + diff --git a/themes/example/lms/templates/head-extra.html b/themes/example/lms/templates/head-extra.html new file mode 100644 index 0000000000..239cc9b864 --- /dev/null +++ b/themes/example/lms/templates/head-extra.html @@ -0,0 +1,19 @@ +## mako +<%page expression_filter="h"/> +<%namespace name='static' file='static_content.html'/> + + + + + + diff --git a/themes/example/lms/templates/header.html b/themes/example/lms/templates/header.html new file mode 100644 index 0000000000..5ef36bec10 --- /dev/null +++ b/themes/example/lms/templates/header.html @@ -0,0 +1,72 @@ +## mako +<%page expression_filter="h"/> +<%namespace name='static' file='static_content.html'/> +<%namespace file='main.html' import="login_query"/> +<%! +from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse +from openedx.core.djangoapps.user_api.accounts.image_helpers import get_profile_image_urls_for_user +%> + + + + + diff --git a/themes/example/lms/templates/index.html b/themes/example/lms/templates/index.html new file mode 100644 index 0000000000..0e7956dba5 --- /dev/null +++ b/themes/example/lms/templates/index.html @@ -0,0 +1,68 @@ +## mako +<%page expression_filter="h"/> +<%inherit file="main.html" /> +<%namespace name='static' file='static_content.html'/> +<%! +from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse +%> + +<%block name="headextra"> + + + +<%block name="js_extra"> + +<%include file="about_site.html" /> + + + +
+
+
+
+
+
+

Lorem ipsum dolor sit amet, ad mea dictas audiam, nec id graecis explicari hasnain

+ % if show_homepage_promo_video: + Watch video + % endif +
+
+
+
+
+ + <%include file="${courses_list}" /> + +
+
+
+
+ +% if show_homepage_promo_video: + +% endif + +% if show_signup_immediately is not UNDEFINED: +## NOTE: This won't work in production, because anonymous views are cached, so it will +## show either with or without this extra js for 3 minutes at a time. + +% endif diff --git a/themes/example/lms/templates/static_templates/about.html b/themes/example/lms/templates/static_templates/about.html new file mode 100644 index 0000000000..d0732fc5f1 --- /dev/null +++ b/themes/example/lms/templates/static_templates/about.html @@ -0,0 +1,80 @@ +## mako +<%page expression_filter="h"/> +<%! from django.utils.translation import ugettext as _ %> +<%namespace name='static' file='../static_content.html'/> +<%inherit file="../main.html" /> + +<%block name="pagetitle">${_("About Us")} + +
+

${_("About Us")}

+
+
+
+
+
+
+

Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti sed. + Pro ei bonorum commune, ea impedit pericula cum. Ex mea dolor maiorum. Et oblique vocibus quo, atqui facete + doctus sed an. Ei sed denique periculis, ad error alterum duo. Veritus eligendi pri ne, cibo vocent abhorreant + ad eum, nam iuvaret electram prodesset ea. Sed in detracto pericula..

+ +

Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti sed. + Pro ei bonorum commune, ea impedit pericula cum. Ex mea dolor maiorum. Et oblique vocibus quo, atqui facete + doctus sed an. Ei sed denique periculis, ad error alterum duo. Veritus eligendi pri ne, cibo vocent abhorreant + ad eum, nam iuvaret electram prodesset ea. Sed in detracto pericula..

+ +

Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti sed. + Pro ei bonorum commune, ea impedit pericula cum. Ex mea dolor maiorum. Et oblique vocibus quo, atqui facete + doctus sed an. Ei sed denique periculis, ad error alterum duo. Veritus eligendi pri ne, cibo vocent abhorreant + ad eum, nam iuvaret electram prodesset ea. Sed in detracto pericula..

+ +

Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti sed. + Pro ei bonorum commune, ea impedit pericula cum. Ex mea dolor maiorum. Et oblique vocibus quo, atqui facete + doctus sed an. Ei sed denique periculis, ad error alterum duo. Veritus eligendi pri ne, cibo vocent abhorreant + ad eum, nam iuvaret electram prodesset ea. Sed in detracto pericula..

+ +

Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti sed. + Pro ei bonorum commune, ea impedit pericula cum. Ex mea dolor maiorum. Et oblique vocibus quo, atqui facete + doctus sed an. Ei sed denique periculis, ad error alterum duo. Veritus eligendi pri ne, cibo vocent abhorreant + ad eum, nam iuvaret electram prodesset ea. Sed in detracto pericula..

+ +

Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti sed. + Pro ei bonorum commune, ea impedit pericula cum. Ex mea dolor maiorum. Et oblique vocibus quo, atqui facete + doctus sed an. Ei sed denique periculis, ad error alterum duo. Veritus eligendi pri ne, cibo vocent abhorreant + ad eum, nam iuvaret electram prodesset ea. Sed in detracto pericula..

+ +

Media Inquiries

+

Lorem ipsum dolor sit amet
+ Tel.: 123-456-7890
+ loremIpsem@lorem.edu
+ Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet: + Lorem ipsum dolor sit amet.

+

+
+
+ Mission Statement +

"Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit."

+

+ Lorem ipsum
+ Lorem ipsum, Lorem ipsum +

+
+
+
+
+
diff --git a/themes/example/lms/templates/static_templates/contact.html b/themes/example/lms/templates/static_templates/contact.html new file mode 100644 index 0000000000..0d3cc34a42 --- /dev/null +++ b/themes/example/lms/templates/static_templates/contact.html @@ -0,0 +1,96 @@ +## mako +<%page expression_filter="h"/> +<%! +from django.utils.translation import ugettext as _ +from openedx.core.djangolib.markup import Text, HTML +from datetime import datetime +import pytz +from django.conf import settings +%> +<%inherit file="../main.html" /> +<%namespace name='static' file='../static_content.html'/> +<%block name="pagetitle">${_("Contact Us")} + +
+

${_("Contact Us")}

+
+ +
+
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + +
+ + +
+ +
+
+
+
+
+
+
+ + + + + +<%block name="js_extra"> + + diff --git a/themes/example/lms/templates/static_templates/faq.html b/themes/example/lms/templates/static_templates/faq.html new file mode 100644 index 0000000000..bdd73c1ac8 --- /dev/null +++ b/themes/example/lms/templates/static_templates/faq.html @@ -0,0 +1,147 @@ +<%page expression_filter="h"/> +<%! from django.utils.translation import ugettext as _ %> +<%inherit file="../main.html" /> +<%namespace name='static' file='../static_content.html'/> + +<%block name="pagetitle">${_("FAQ's")} + +
+

${_("General FAQs")}

+
+
+ +
+
+
+ +
+

${_("Academic Planning")}

+
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit ametLorem ipsum dolor sit amet +

+
+
+ +
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit ametLorem ipsum dolor sit amet +

+
+
+ +
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit ametLorem ipsum dolor sit amet +

+
+
+ + ${_("Back to top")} + +

${_("Registration")}

+
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit ametLorem ipsum dolor sit amet +

+
+
+ +
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet +

+
+
+ +
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit amet +

+
    +
  • + Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet +
  • +
  • + Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet +
  • +
+
+
+ + ${_("Back to top")} + +

${_("Finances")}

+
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet +

+
+
+
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet +

+
+
+
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet +

+
+
+
+

Lorem ipsum dolor sit amet

+
+

+ Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet +

+
+
+ ${_("Back to top")} + +
+
+
+
+
+ +<%block name="js_extra"> + + + diff --git a/themes/example/lms/templates/static_templates/honor.html b/themes/example/lms/templates/static_templates/honor.html new file mode 100644 index 0000000000..72d4688477 --- /dev/null +++ b/themes/example/lms/templates/static_templates/honor.html @@ -0,0 +1,93 @@ +## mako +<%page expression_filter="h"/> +<%! from django.utils.translation import ugettext as _ %> +<%namespace name='static' file='../static_content.html'/> +<%inherit file="../main.html" /> + +<%block name="pagetitle">${_("Honor Code")} + +
+

${_("Honor Code")}

+
+
+
+
+
+ +
+

Effective Date: January 01, 1970

+

Lorem ipsum dolor sit amet, sea te quaeque.

+ +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ ${_("Back to top")} + +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ +
    +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue..
  • +          
+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. +

+
    +              
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue..
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
+ ${_("Back to top")} + +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ ${_("Back to top")} + +

Effective Date: Januray 01, 1970

+
+
+
+
+
diff --git a/themes/example/lms/templates/static_templates/privacy.html b/themes/example/lms/templates/static_templates/privacy.html new file mode 100644 index 0000000000..05c71809fe --- /dev/null +++ b/themes/example/lms/templates/static_templates/privacy.html @@ -0,0 +1,89 @@ +## mako +<%page expression_filter="h"/> +<%! from django.utils.translation import ugettext as _ %> +<%namespace name='static' file='../static_content.html'/> +<%inherit file="../main.html" /> + +<%block name="pagetitle">${_("Privacy Policy")} + +
+

${_("Privacy Policy")}

+
+
+
+
+
+ +
+

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ ${_("Back to top")} + +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ +
    +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue..
  • +          
+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. +

+
    +              
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue..
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
+ ${_("Back to top")} + +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ ${_("Back to top")} + +
+
+
+
+
diff --git a/themes/example/lms/templates/static_templates/tos.html b/themes/example/lms/templates/static_templates/tos.html new file mode 100644 index 0000000000..a0548a6fb9 --- /dev/null +++ b/themes/example/lms/templates/static_templates/tos.html @@ -0,0 +1,89 @@ +## mako +<%page expression_filter="h"/> +<%! from django.utils.translation import ugettext as _ %> +<%namespace name='static' file='../static_content.html'/> +<%inherit file="../main.html" /> + +<%block name="pagetitle">${_("Terms of Service")} + +
+

${_("Terms of Service")}

+
+
+
+
+
+ +
+

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ ${_("Back to top")} + +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ +
    +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue..
  • +          
+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. +

+
    +              
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue..
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
  • Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue.
  • +
+ ${_("Back to top")} + +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. Lorem ipsum dolor sit amet, sea te quaeque suscipiantur. Nullam vituperata at his, usu ad solum augue. + Mel partem iudicabit te, an sed vocent offendit. Est prompta deserunt senserit et, ex ubique deleniti + sed. +

+ ${_("Back to top")} + +
+
+
+
+
diff --git a/themes/example/lms/templates/student_account/login_and_register.html b/themes/example/lms/templates/student_account/login_and_register.html new file mode 100644 index 0000000000..bf523c22e2 --- /dev/null +++ b/themes/example/lms/templates/student_account/login_and_register.html @@ -0,0 +1,38 @@ +<%page expression_filter="h"/> +<%! + import json + from django.utils.translation import ugettext as _ + from openedx.core.djangolib.js_utils import dump_js_escaped_json +%> +<%namespace name='static' file='/static_content.html'/> + +<%inherit file="../main.html" /> + +<%block name="pagetitle">${_("Sign in or Create Account")} + +<%block name="js_extra"> + <%static:require_module module_name="js/student_account/logistration_factory" class_name="LogistrationFactory"> + var options = ${data | n, dump_js_escaped_json}; + LogistrationFactory(options); + if ('newrelic' in window) { + newrelic.finished(); + // Because of a New Relic bug, the finished() event doesn't show up + // in Insights, so we have to make a new PageAction that is basically + // the same thing. We still want newrelic.finished() for session + // traces though. + newrelic.addPageAction('xfinished'); + } + + + +<%block name="header_extras"> + % for template_name in ["account", "access", "form_field", "login", "register", "institution_login", "institution_register", "password_reset", "hinted_login"]: + +% endfor + + +
+