Курсовая работа: Разработка сайта по составлению комплектации компьютера

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

}

});

});

Plugins.js:

jQuery(document).ready(function($){

var slidesWrapper = $('.cd-hero-slider');

//check if a .cd-hero-slider exists in the DOM

if ( slidesWrapper.length > 0 ) {

var primaryNav = $('.cd-primary-nav'),

sliderNav = $('.cd-slider-nav'),

navigationMarker = $('.cd-marker'),

slidesNumber = slidesWrapper.children('li').length,

visibleSlidePosition = 0,

autoPlayId,

autoPlayDelay = 5000;

//upload videos (if not on mobile devices)

uploadVideo(slidesWrapper);

//autoplay slider

setAutoplay(slidesWrapper, slidesNumber, autoPlayDelay);

//on mobile - open/close primary navigation clicking/tapping the menu icon

primaryNav.on('click', function(event){

if($(event.target).is('.cd-primary-nav')) $(this).children('ul').toggleClass('is-visible');

});

//change visible slide

sliderNav.on('click', 'li', function(event){

event.preventDefault();

var selectedItem = $(this);

if(!selectedItem.hasClass('selected')) {

// if it's not already selected

var selectedPosition = selectedItem.index(),

activePosition = slidesWrapper.find('li.selected').index();

if( activePosition < selectedPosition) {

nextSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, selectedPosition);

} else {

prevSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, selectedPosition);

}

//this is used for the autoplay

visibleSlidePosition = selectedPosition;

updateSliderNavigation(sliderNav, selectedPosition);

updateNavigationMarker(navigationMarker, selectedPosition+1);

//reset autoplay

setAutoplay(slidesWrapper, slidesNumber, autoPlayDelay);

}

});

}

function nextSlide(visibleSlide, container, pagination, n){

visibleSlide.removeClass('selected from-left from-right').addClass('is-moving').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){

visibleSlide.removeClass('is-moving');

});

container.children('li').eq(n).addClass('selected from-right').prevAll().addClass('move-left');

checkVideo(visibleSlide, container, n);

}

function prevSlide(visibleSlide, container, pagination, n){

visibleSlide.removeClass('selected from-left from-right').addClass('is-moving').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){

visibleSlide.removeClass('is-moving');

});

container.children('li').eq(n).addClass('selected from-left').removeClass('move-left').nextAll().removeClass('move-left');

checkVideo(visibleSlide, container, n);

}

function updateSliderNavigation(pagination, n) {

var navigationDot = pagination.find('.selected');

navigationDot.removeClass('selected');

pagination.find('li').eq(n).addClass('selected');

}

function setAutoplay(wrapper, length, delay) {

if(wrapper.hasClass('autoplay')) {

clearInterval(autoPlayId);

autoPlayId = window.setInterval(function(){autoplaySlider(length)}, delay);

}

}

function autoplaySlider(length) {

if( visibleSlidePosition < length - 1) {

nextSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, visibleSlidePosition + 1);

visibleSlidePosition +=1;

} else {

prevSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, 0);

visibleSlidePosition = 0;

}

updateNavigationMarker(navigationMarker, visibleSlidePosition+1);

updateSliderNavigation(sliderNav, visibleSlidePosition);

}

function uploadVideo(container) {

container.find('.cd-bg-video-wrapper').each(function(){

var videoWrapper = $(this);

if( videoWrapper.is(':visible') ) {

// if visible - we are not on a mobile device

var videoUrl = videoWrapper.data('video'),

video = $('<video loop><source src="'+videoUrl+'.mp4" type="video/mp4" /><source src="'+videoUrl+'.webm" type="video/webm" /></video>');

video.appendTo(videoWrapper);

// play video if first slide

if(videoWrapper.parent('.cd-bg-video.selected').length > 0) video.get(0).play();

}

});

}

function checkVideo(hiddenSlide, container, n) {

//check if a video outside the viewport is playing - if yes, pause it

var hiddenVideo = hiddenSlide.find('video');

if( hiddenVideo.length > 0 ) hiddenVideo.get(0).pause();

//check if the select slide contains a video element - if yes, play the video

var visibleVideo = container.children('li').eq(n).find('video');

if( visibleVideo.length > 0 ) visibleVideo.get(0).play();

}

function updateNavigationMarker(marker, n) {

marker.removeClassPrefix('item').addClass('item-'+n);

}

$.fn.removeClassPrefix = function(prefix) {

//remove all classes starting with 'prefix'

this.each(function(i, el) {

var classes = el.className.split(" ").filter(function(c) {

return c.lastIndexOf(prefix, 0) !== 0;

});

el.className = $.trim(classes.join(" "));

});

return this;

};

});

/*!

* Lightbox v2.9.0

* by Lokesh Dhakar

*

* More info:

* http://lokeshdhakar.com/projects/lightbox2/

*

* Copyright 2007, 2015 Lokesh Dhakar

* Released under the MIT license

* https://github.com/lokesh/lightbox2/blob/master/LICENSE

*/

// Uses Node, AMD or browser globals to create a module.

(function (root, factory) {

if (typeof define === 'function' && define.amd) {

// AMD. Register as an anonymous module.

define(['jquery'], factory);

} else if (typeof exports === 'object') {

// Node. Does not work with strict CommonJS, but

// only CommonJS-like environments that support module.exports,

// like Node.

module.exports = factory(require('jquery'));

} else {

// Browser globals (root is window)

root.lightbox = factory(root.jQuery);

}

}(this, function ($) {

function Lightbox(options) {

this.album = [];

this.currentImageIndex = void 0;

this.init();

// options

this.options = $.extend({}, this.constructor.defaults);

this.option(options);

}

// Descriptions of all options available on the demo site:

// http://lokeshdhakar.com/projects/lightbox2/index.html#options

Lightbox.defaults = {

albumLabel: 'Image %1 of %2',

alwaysShowNavOnTouchDevices: false,

fadeDuration: 600,

fitImagesInViewport: true,

imageFadeDuration: 600,

// maxWidth: 800,

// maxHeight: 600,

positionFromTop: 50,

resizeDuration: 700,

showImageNumberLabel: true,

wrapAround: false,

disableScrolling: false,

/*

Sanitize Title

If the caption data is trusted, for example you are hardcoding it in, then leave this to false.

This will free you to add html tags, such as links, in the caption.

If the caption data is user submitted or from some other untrusted source, then set this to true

to prevent xss and other injection attacks.

*/

sanitizeTitle: false

};

Lightbox.prototype.option = function(options) {

$.extend(this.options, options);

};

Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) {

return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages);

};

Lightbox.prototype.init = function() {

var self = this;

// Both enable and build methods require the body tag to be in the DOM.

$(document).ready(function() {

self.enable();

self.build();

});

};

// Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes

// that contain 'lightbox'. When these are clicked, start lightbox.

Lightbox.prototype.enable = function() {

var self = this;

$('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) {

self.start($(event.currentTarget));

return false;

});

};

// Build html for the lightbox and the overlay.

// Attach event handlers to the new DOM elements. click click click

Lightbox.prototype.build = function() {

var self = this;

$('<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo($('body'));

// Cache jQuery objects

this.$lightbox = $('#lightbox');

this.$overlay = $('#lightboxOverlay');

this.$outerContainer = this.$lightbox.find('.lb-outerContainer');

this.$container = this.$lightbox.find('.lb-container');

this.$image = this.$lightbox.find('.lb-image');

this.$nav = this.$lightbox.find('.lb-nav');

// Store css values for future lookup

this.containerPadding = {

top: parseInt(this.$container.css('padding-top'), 10),

right: parseInt(this.$container.css('padding-right'), 10),

bottom: parseInt(this.$container.css('padding-bottom'), 10),

left: parseInt(this.$container.css('padding-left'), 10)

};

this.imageBorderWidth = {

top: parseInt(this.$image.css('border-top-width'), 10),

right: parseInt(this.$image.css('border-right-width'), 10),

bottom: parseInt(this.$image.css('border-bottom-width'), 10),

left: parseInt(this.$image.css('border-left-width'), 10)

};

// Attach event handlers to the newly minted DOM elements

this.$overlay.hide().on('click', function() {

self.end();

return false;

});

this.$lightbox.hide().on('click', function(event) {

if ($(event.target).attr('id') === 'lightbox') {

self.end();

}

return false;

});

this.$outerContainer.on('click', function(event) {

if ($(event.target).attr('id') === 'lightbox') {

self.end();

}

return false;

});

this.$lightbox.find('.lb-prev').on('click', function() {

if (self.currentImageIndex === 0) {

self.changeImage(self.album.length - 1);

} else {

self.changeImage(self.currentImageIndex - 1);

}

return false;

});

this.$lightbox.find('.lb-next').on('click', function() {

if (self.currentImageIndex === self.album.length - 1) {

self.changeImage(0);

} else {

self.changeImage(self.currentImageIndex + 1);

}

return false;

});

this.$nav.on('mousedown', function(event) {

if (event.which === 3) {

self.$nav.css('pointer-events', 'none');

self.$lightbox.one('contextmenu', function() {

setTimeout(function() {

this.$nav.css('pointer-events', 'auto');

}.bind(self), 0);

});

}

});

this.$lightbox.find('.lb-loader, .lb-close').on('click', function() {

self.end();

return false;

});

};

// Show overlay and lightbox. If the image is part of a set, add siblings to album array.

Lightbox.prototype.start = function($link) {

var self = this;

var $window = $(window);

$window.on('resize', $.proxy(this.sizeOverlay, this));

$('select, object, embed').css({

visibility: 'hidden'

});

this.sizeOverlay();

this.album = [];

var imageNumber = 0;

function addToAlbum($link) {

self.album.push({

link: $link.attr('href'),

title: $link.attr('data-title') || $link.attr('title')

});

}

// Support both data-lightbox attribute and rel attribute implementations

var dataLightboxValue = $link.attr('data-lightbox');

var $links;

if (dataLightboxValue) {

$links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]');

for (var i = 0; i < $links.length; i = ++i) {

addToAlbum($($links[i]));

if ($links[i] === $link[0]) {

imageNumber = i;

}

}

} else {

if ($link.attr('rel') === 'lightbox') {

// If image is not part of a set

addToAlbum($link);

} else {

// If image is part of a set

$links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]');

for (var j = 0; j < $links.length; j = ++j) {

addToAlbum($($links[j]));

if ($links[j] === $link[0]) {

imageNumber = j;

}

}

}

}

// Position Lightbox

var top = $window.scrollTop() + this.options.positionFromTop;

var left = $window.scrollLeft();

this.$lightbox.css({

top: top + 'px',

left: left + 'px'

}).fadeIn(this.options.fadeDuration);

// Disable scrolling of the page while open

if (this.options.disableScrolling) {

$('body').addClass('lb-disable-scrolling');

}

this.changeImage(imageNumber);

};

// Hide most UI elements in preparation for the animated resizing of the lightbox.

Lightbox.prototype.changeImage = function(imageNumber) {

var self = this;

this.disableKeyboardNav();

var $image = this.$lightbox.find('.lb-image');

this.$overlay.fadeIn(this.options.fadeDuration);

$('.lb-loader').fadeIn('slow');

this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide();

this.$outerContainer.addClass('animating');

// When image to show is preloaded, we send the width and height to sizeContainer()

var preloader = new Image();

preloader.onload = function() {

var $preloader;

var imageHeight;

var imageWidth;

var maxImageHeight;

var maxImageWidth;

var windowHeight;

var windowWidth;

$image.attr('src', self.album[imageNumber].link);

$preloader = $(preloader);

$image.width(preloader.width);

$image.height(preloader.height);

if (self.options.fitImagesInViewport) {

// Fit image inside the viewport.

// Take into account the border around the image and an additional 10px gutter on each side.

windowWidth = $(window).width();

windowHeight = $(window).height();

maxImageWidth = windowWidth - self.containerPadding.left - self.containerPadding.right - self.imageBorderWidth.left - self.imageBorderWidth.right - 20;

maxImageHeight = windowHeight - self.containerPadding.top - self.containerPadding.bottom - self.imageBorderWidth.top - self.imageBorderWidth.bottom - 120;

// Check if image size is larger then maxWidth|maxHeight in settings

if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) {

maxImageWidth = self.options.maxWidth;

}

if (self.options.maxHeight && self.options.maxHeight < maxImageWidth) {

maxImageHeight = self.options.maxHeight;

}

// Is there a fitting issue?

if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) {

if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) {

imageWidth = maxImageWidth;

imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10);

$image.width(imageWidth);

$image.height(imageHeight);

} else {

imageHeight = maxImageHeight;

imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10);

$image.width(imageWidth);

$image.height(imageHeight);

}

}

}

self.sizeContainer($image.width(), $image.height());

};

preloader.src = this.album[imageNumber].link;

this.currentImageIndex = imageNumber;

};

// Stretch overlay to fit the viewport

Lightbox.prototype.sizeOverlay = function() {

this.$overlay

.width($(document).width())

.height($(document).height());

};

// Animate the size of the lightbox to fit the image we are showing

Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) {

var self = this;

var oldWidth = this.$outerContainer.outerWidth();

var oldHeight = this.$outerContainer.outerHeight();

var newWidth = imageWidth + this.containerPadding.left + this.containerPadding.right + this.imageBorderWidth.left + this.imageBorderWidth.right;

var newHeight = imageHeight + this.containerPadding.top + this.containerPadding.bottom + this.imageBorderWidth.top + this.imageBorderWidth.bottom;

function postResize() {

self.$lightbox.find('.lb-dataContainer').width(newWidth);

self.$lightbox.find('.lb-prevLink').height(newHeight);

self.$lightbox.find('.lb-nextLink').height(newHeight);

self.showImage();

}

if (oldWidth !== newWidth || oldHeight !== newHeight) {

this.$outerContainer.animate({

width: newWidth,

height: newHeight

}, this.options.resizeDuration, 'swing', function() {

postResize();

});

} else {

postResize();

}

};

// Display the image and its details and begin preload neighboring images.

Lightbox.prototype.showImage = function() {

this.$lightbox.find('.lb-loader').stop(true).hide();

this.$lightbox.find('.lb-image').fadeIn(this.options.imageFadeDuration);

this.updateNav();

this.updateDetails();

this.preloadNeighboringImages();

this.enableKeyboardNav();

};

// Display previous and next navigation if appropriate.

Lightbox.prototype.updateNav = function() {

// Check to see if the browser supports touch events. If so, we take the conservative approach

// and assume that mouse hover events are not supported and always show prev/next navigation

// arrows in image sets.

var alwaysShowNav = false;

try {

document.createEvent('TouchEvent');

alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false;

} catch (e) {}

this.$lightbox.find('.lb-nav').show();

if (this.album.length > 1) {

if (this.options.wrapAround) {

if (alwaysShowNav) {

this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1');

}

this.$lightbox.find('.lb-prev, .lb-next').show();

} else {

if (this.currentImageIndex > 0) {

this.$lightbox.find('.lb-prev').show();

if (alwaysShowNav) {

this.$lightbox.find('.lb-prev').css('opacity', '1');

}

}

if (this.currentImageIndex < this.album.length - 1) {

this.$lightbox.find('.lb-next').show();

if (alwaysShowNav) {

this.$lightbox.find('.lb-next').css('opacity', '1');

}

}

}

}

};

// Display caption, image number, and closing button.

Lightbox.prototype.updateDetails = function() {

var self = this;

// Enable anchor clicks in the injected caption html.