/*
Framework averin.pro
Version: 5.0.0
Docs & Examples: https://framework.averin.pro/
*/
/*
Part of the framework.averin.pro
AverinZoom — jQuery plugin
Version: 0.1
Docs & Examples: https://framework.averin.pro/
*/
$(document).on('click', '.averin-zoom', onAverinZoomOpenClick);
$(document).on('click', '.averin-zoom_wrapper', onAverinWrapClick);
$(document).on('keydown', onAverinZoomKeyDown);
/**
* @param {string} src
* @param {string} [title]
* @return {jQuery}
*/
function averinZoomOpen(src, title) {
$('body').css({'overflow-x': 'hidden', 'overflow-y': 'hidden'});
var $wrap = $('
');
$wrap
.attr('style', 'display: none;')
.addClass('averin-zoom_wrapper')
.appendTo($('body'));
$('')
.addClass('averin-zoom_close')
.html('x')
.appendTo($wrap);
var $content = $('');
$content
.addClass('averin-zoom_content')
.appendTo($wrap);
$('')
.attr('alt', '')
.attr('src', src)
.addClass('averin-zoom_image')
.appendTo($content);
if(title) {
$('')
.addClass('averin-zoom_title')
.html(title)
.appendTo($content);
}
$wrap
.fadeIn('50')
.show('slow');
return $wrap;
}
function averinZoomClose() {
var $wrap = $('.averin-zoom_wrapper');
$wrap.fadeOut('30', function () {
$wrap.detach().remove();
$('body').css({'overflow-x': '', 'overflow-y': ''});
});
}
function onAverinZoomOpenClick(e) {
e.preventDefault();
var $zoom = $(this);
var src = $zoom.data('src');
var title = $zoom.data('title');
if(!src){
src = $zoom.attr('href');
}
if(!src){
src = $zoom.attr('src');
}
if(!src){
src = $zoom.find('img').first().attr('src');
}
if(!title){
title = $zoom.attr('title');
}
if(!title){
title = $zoom.attr('alt');
}
if(!title){
title = $zoom.find('img').first().attr('title');
}
if(!title){
title = $zoom.find('img').first().attr('alt');
}
if(!title){
title = '';
}
if(!src){
console.error('Аттрибут [href] или [src] или [data-src] не найден для блока с классом [zoom]');
return false;
}
averinZoomOpen(src, title.trim());
return false;
}
function onAverinWrapClick(e) {
e.preventDefault();
var $target = $(e.target);
if(!$target.hasClass('averin-zoom_wrapper') && !$target.hasClass('averin-zoom_content') && !$target.hasClass('averin-zoom_close')){
return false;
}
averinZoomClose();
return false;
}
function onAverinZoomKeyDown(e) {
if (e.which === 27) {
averinZoomClose();
}
}
/*
Part of the framework.averin.pro
AverinSwipeMenu — jQuery plugin
Version: 0.1
Docs & Examples: https://framework.averin.pro/
*/
(function($) {
var default_options = {
'side' : 'left' // В какую сторону открывать меню
};
var methods = {
open : function(options) {
var options = $.extend({}, default_options, options);
this.show();
$('.elevator').css("visibility", "hidden");
id = this.attr('id');
if (options.side == "left") {
this.css("left", "-250px");
$('body').css("width", $('body').innerWidth());
$('body').css("position", "absolute");
$('body').animate({
left: "250"
}, 100, function() {
});
this.css("top", "0px");
this.animate({
left: "0"
}, 100, function() {
});
}
if (options.side == "right") {
/*
this.addClass("is-offcanvasTransition");
this.css("right", "-250px");
this.css("transform", "translateX(0px)");
translateX = "-250px";
$('body').css("transform", "translateX("+translateX+")");
*/
this.css("right", "-250px");
$('body').css("width", $('body').innerWidth());
$('body').css("position", "absolute");
$('body').animate({
right: "250"
}, 100, function() {
});
this.css("top", "0px");
this.animate({
right: "0"
}, 100, function() {
});
}
$('body').addClass("is-no-scroll");
$('body').addClass("is-offcanvasTransition");
$('body').prepend('');
$('.swipe_menu_overlay').fadeIn(100);
},
close : function(options) {
var options = $.extend({}, default_options, options);
$('.elevator').css("visibility", "");
$('.swipe_menu_overlay').fadeOut(100);
if (options.side == "left") {
//$('#'+options.id).css("left", "-250px");
//$('body').css("transform", "translateX(0px)");
$('body').animate({
left: "0"
}, 100, function() {
$('body').css("position", "");
$('body').removeClass("is-no-scroll");
$('body').removeClass("is-offcanvasTransition");
$('body').css("transform", "");
$('body').css("left", "");
$('body').css("width", "");
$('#'+options.id).css("top", '');
$('#'+options.id).hide();
$('.swipe_menu_overlay').remove();
});
this.css("top", "0px");
$('#'+options.id).animate({
left: "-300"
}, 100, function() {
});
}
if (options.side == "right") {
//$('#'+options.id).css("right", "-250px");
//$('body').css("transform", "translateX(0px)");
$('body').animate({
right: "0"
}, 100, function() {
$('body').css("position", "");
$('body').removeClass("is-no-scroll");
$('body').removeClass("is-offcanvasTransition");
$('body').css("transform", "");
$('body').css("right", "");
$('body').css("width", "");
$('#'+options.id).css("top", '');
$('#'+options.id).hide();
$('.swipe_menu_overlay').remove();
});
this.css("top", "0px");
$('#'+options.id).animate({
right: "-300"
}, 100, function() {
});
}
},
init : function( options ) {
var options = $.extend({}, default_options, options);
}
};
var options = $.extend({}, default_options, options);
$.fn.AverinSwipeMenu = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method==='object' || !method) {
return methods['open'].apply(this, arguments);
} else {
$.error('jquery.AverinSwipeMenu: Method ' + method + ' does not exist');
}
};
})(jQuery);
/*
Part of the framework.averin.pro
averinwindow — jQuery plugin
Base plugin: arcticModal — jQuery plugin Sergey Predvoditelev (sergey.predvoditelev@gmail.com) (http://arcticlab.ru/)
Version: 0.1
Docs & Examples: https://framework.averin.pro/
*/
(function($) {
if($.averinwindowconstructor !== 'function') {
var default_options = {
type: 'html', // ajax или html
content: '',
url: '',
ajax: {},
ajax_request: null,
closeOnEsc: true,
closeOnOverlayClick: true,
clone: false,
overlay: {
block: undefined,
tpl: '',
css: {
backgroundColor: '#000',
opacity: .6
}
},
container: {
block: undefined,
tpl: ''
},
wrap: undefined,
body: undefined,
errors: {
tpl: '',
autoclose_delay: 2000,
ajax_unsuccessful_load: 'Error'
},
openEffect: {
type: 'fade',
speed: 400
},
closeEffect: {
type: 'fade',
speed: 400
},
beforeOpen: $.noop,
afterOpen: $.noop,
beforeClose: $.noop,
afterClose: $.noop,
afterLoading: $.noop,
afterLoadingOnShow: $.noop,
errorLoading: $.noop
};
var modalID = 0;
var modals = $([]);
var utils = {
isEventOut: function(blocks, e) {
var r = true;
$(blocks).each(function() {
if ($(e.target).get(0)==$(this).get(0)) r = false;
if ($(e.target).closest('HTML', $(this).get(0)).length==0) r = false;
});
return r;
}
};
var modal = {
getParentEl: function(el) {
var r = $(el);
if (r.data('averinwindow')) return r;
r = $(el).closest('.averin-window-container').data('averinwindowParentEl');
if (r) return r;
return false;
},
transition: function(el, action, options, callback) {
callback = callback==undefined ? $.noop : callback;
switch (options.type) {
case 'fade':
action=='show' ? el.fadeIn(options.speed, callback) : el.fadeOut(options.speed, callback);
break;
case 'none':
action=='show' ? el.show() : el.hide();
callback();
break;
}
},
prepare_body: function(D, $this) {
// Обработчик закрытия
$('.close', D.body).unbind('click.averin-window').bind('click.averin-window', function() {
$this.averinwindow('close');
return false;
});
},
init_el: function($this, options) {
var D = $this.data('averinwindow');
if (D) return;
D = options;
modalID++;
D.modalID = modalID;
D.overlay.block = $(D.overlay.tpl);
D.overlay.block.css(D.overlay.css);
// Container
D.container.block = $(D.container.tpl);
// BODY
D.body = $('.averin-window-container_i2', D.container.block);
if (options.clone) {
D.body.html($this.clone(true));
} else {
$this.before('');
D.body.html($this);
}
// Подготовка содержимого
modal.prepare_body(D, $this);
// Закрытие при клике на overlay
if (D.closeOnOverlayClick)
D.overlay.block.add(D.container.block).click(function(e) {
if (utils.isEventOut($('>*', D.body), e))
$this.averinwindow('close');
});
// Запомним настройки
D.container.block.data('averinwindowParentEl', $this);
$this.data('averinwindow', D);
modals = $.merge(modals, $this);
// Показать
$.proxy(actions.show, $this)();
if (D.type=='html') return $this;
// Ajax-загрузка
if (D.ajax.beforeSend!=undefined) {
var fn_beforeSend = D.ajax.beforeSend;
delete D.ajax.beforeSend;
}
if (D.ajax.success!=undefined) {
var fn_success = D.ajax.success;
delete D.ajax.success;
}
if (D.ajax.error!=undefined) {
var fn_error = D.ajax.error;
delete D.ajax.error;
}
var o = $.extend(true, {
url: D.url,
beforeSend: function() {
if (fn_beforeSend==undefined) {
D.body.html('');
} else {
fn_beforeSend(D, $this);
}
},
success: function(responce) {
// Событие после загрузки до показа содержимого
$this.trigger('afterLoading');
D.afterLoading(D, $this, responce);
if (fn_success==undefined) {
D.body.html(responce);
} else {
fn_success(D, $this, responce);
}
modal.prepare_body(D, $this);
// Событие после загрузки после отображения содержимого
$this.trigger('afterLoadingOnShow');
D.afterLoadingOnShow(D, $this, responce);
},
error: function() {
// Событие при ошибке загрузки
$this.trigger('errorLoading');
D.errorLoading(D, $this);
if (fn_error==undefined) {
D.body.html(D.errors.tpl);
$('.averin-window-error', D.body).html(D.errors.ajax_unsuccessful_load);
$('.close', D.body).click(function() {
$this.averinwindow('close');
return false;
});
if (D.errors.autoclose_delay)
setTimeout(function() {
$this.averinwindow('close');
}, D.errors.autoclose_delay);
} else {
fn_error(D, $this);
}
}
}, D.ajax);
D.ajax_request = $.ajax(o);
// Запомнить настройки
$this.data('averinwindow', D);
},
// Инициализация
init: function(options) {
options = $.extend(true, {}, default_options, options);
if ($.isFunction(this)) {
if (options==undefined) {
$.error('jquery.averinwindow: Uncorrect parameters');
return;
}
if (options.type=='') {
$.error('jquery.averinwindow: Don\'t set parameter "type"');
return;
}
switch (options.type) {
case 'html':
if (options.content=='') {
$.error('jquery.averinwindow: Don\'t set parameter "content"');
return
}
var c = options.content;
options.content = '';
return modal.init_el($(c), options);
break;
case 'ajax':
if (options.url=='') {
$.error('jquery.averinwindow: Don\'t set parameter "url"');
return;
}
return modal.init_el($(''), options);
break;
}
} else {
return this.each(function() {
modal.init_el($(this), $.extend(true, {}, options));
});
}
}
};
var actions = {
// Показать
show: function() {
var $this = modal.getParentEl(this);
if ($this===false) {
$.error('jquery.averinwindow: Uncorrect call');
return;
}
var D = $this.data('averinwindow');
// Добавить overlay и container
D.overlay.block.hide();
D.container.block.hide();
$('BODY').append(D.overlay.block);
$('BODY').append(D.container.block);
// Событие
D.beforeOpen(D, $this);
$this.trigger('beforeOpen');
// Wrap
if (D.wrap.css('overflow')!='hidden') {
D.wrap.data('averinwindowOverflow', D.wrap.css('overflow'));
var w1 = D.wrap.outerWidth(true);
D.wrap.css('overflow', 'hidden');
var w2 = D.wrap.outerWidth(true);
if (w2!=w1)
D.wrap.css('marginRight', (w2 - w1) + 'px');
}
// Скрыть предыдущие оверлеи
modals.not($this).each(function() {
var d = $(this).data('averinwindow');
d.overlay.block.hide();
});
// Показать
modal.transition(D.overlay.block, 'show', modals.length>1 ? {type: 'none'} : D.openEffect);
modal.transition(D.container.block, 'show', modals.length>1 ? {type: 'none'} : D.openEffect, function() {
D.afterOpen(D, $this);
$this.trigger('afterOpen');
});
return $this;
},
// Закрыть
close: function() {
if ($.isFunction(this)) {
modals.each(function() {
$(this).averinwindow('close');
});
} else {
return this.each(function() {
var $this = modal.getParentEl(this);
if ($this===false) {
$.error('jquery.averinwindow: Uncorrect call');
return;
}
var D = $this.data('averinwindow');
// Событие перед закрытием
if (D.beforeClose(D, $this)===false) return;
$this.trigger('beforeClose');
// Показать предыдущие оверлеи
modals.not($this).last().each(function() {
var d = $(this).data('averinwindow');
d.overlay.block.show();
});
modal.transition(D.overlay.block, 'hide', modals.length>1 ? {type: 'none'} : D.closeEffect);
modal.transition(D.container.block, 'hide', modals.length>1 ? {type: 'none'} : D.closeEffect, function() {
// Событие после закрытия
D.afterClose(D, $this);
$this.trigger('afterClose');
// Если не клонировали - вернём на место
if (!D.clone)
$('#averin-windowReserve' + D.modalID).replaceWith(D.body.find('>*'));
D.overlay.block.remove();
D.container.block.remove();
$this.data('averinwindow', null);
if (!$('.averin-window-container').length) {
if (D.wrap.data('averinwindowOverflow'))
D.wrap.css('overflow', D.wrap.data('averinwindowOverflow'));
D.wrap.css('marginRight', 0);
}
});
if (D.type=='ajax')
D.ajax_request.abort();
modals = modals.not($this);
});
}
},
// Установить опции по-умолчанию
setDefault: function(options) {
$.extend(true, default_options, options);
}
};
$(function() {
default_options.wrap = $((document.all && !document.querySelector) ? 'html' : 'body');
});
// Закрытие при нажатии Escape
$(document).bind('keyup.averinwindow', function(e) {
var m = modals.last();
if (!m.length) return;
var D = m.data('averinwindow');
if (D.closeOnEsc && (e.keyCode===27))
m.averinwindow('close');
});
$.averinwindow = $.fn.averinwindow = function(method) {
if (actions[method]) {
return actions[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method==='object' || !method) {
return modal.init.apply(this, arguments);
} else {
$.error('jquery.averinwindow: Method ' + method + ' does not exist');
}
};
}
})(jQuery);
/*
Part of the framework.averin.pro
AverinAnimator — jQuery plugin
Version: 0.5
Date: December 8, 2018
Docs & Examples: https://framework.averin.pro/
*/
$(function(){
$("*[data-effect]").each(function(){ //Выборка всех элемментов с атрибутом data-effect
effect = $(this).attr("data-effect"); //Получаем класс анимации
data_hold = $(this).attr("data-hold"); //Получаем время запуска анимации
if(data_hold == undefined){ //Если нет атрибута
miliseconds_hold = 0;
} else{
miliseconds_hold = data_hold/1000; //Вычисляем миллисекунды
}
data_holdsee = $(this).attr("data-holdsee"); //Получаем статус запуска только при появлении в зоне видимости
if(data_holdsee == undefined){ //Если нет атрибута
holdsee = 0;
} else{
holdsee = 1; // Запуск при появлении в поле видимости
}
animate_start = $(this).attr("data-duration"); //Получаем скорость анимации
if(animate_start == undefined){ //Если нет атрибута
miliseconds = 1;
} else{
miliseconds = animate_start/1000; //Вычисляем миллисекунды
}
$(this).attr("style", "-webkit-animation-duration: " + miliseconds + "s; -moz-animation-duration: " + miliseconds + "s; -o-animation-duration: " + miliseconds + "s; animation-duration: " + miliseconds + "s; animation-duration: " + miliseconds + "s; -webkit-animation-delay: " + miliseconds_hold + "s; -moz-animation-delay: " + miliseconds_hold + "s; -o-animation-delay: " + miliseconds_hold + "s; animation-delay: " + miliseconds_hold + "s;"); //Задаём скорость анимации эллементу в миллисекундах
if (holdsee == 0) {
$(this).addClass("animated " + effect); //запускаем анимацию
} else {
var el = $(this);
$(window).scroll(function(){
if ( $(this).scrollTop() > el.offset().top - 200 ) {
el.addClass("animated " + effect); //запускаем анимацию
}
});
}
})
});
/* *
Part of the framework.averin.pro
AverinViewport — Vanilla js plugin
Version: 0.1
Docs & Examples: https://framework.averin.pro/
*/
document.addEventListener('DOMContentLoaded', function(){
let metaView = document.head.querySelector("[name=viewport]");
const AverinViewport = () => {
if(window.innerHeight > window.innerWidth){
metaView.setAttribute('content',metaView.dataset.viewport_portrait);
} else {
metaView.setAttribute('content',metaView.dataset.viewport_landscape);
}
};
window.addEventListener("orientationchange", function() {
setTimeout(function() {
AverinViewport();
}, 500);
});
AverinViewport();
});
/* *
Part of the framework.averin.pro
AverinTooltip — Vanilla js plugin
Version: 1.0
Docs & Examples: https://framework.averin.pro/
*/
document.addEventListener('DOMContentLoaded', function(){
let selectDataTitle = document.querySelectorAll('a'), removeP = function () {
let removeTool = document.querySelector('.tooltip');
if (removeTool) {
removeTool.remove();
}
}, dataSetTool = function (e) {
removeP();
let p = document.createElement('p');
p.classList.add('tooltip');
p.style.display = "block";
if (this.dataset.title) {
p.innerText = Object.values(this.dataset)[0];
}
if (this.dataset.titleImg) {
let imgTool = document.createElement('img');
imgTool.setAttribute("src", Object.values(this.dataset)[0]);
imgTool.classList.add('image');
p.appendChild(imgTool);
}
if (this.dataset.title || this.dataset.titleImg) {
let mouseX = e.clientX + "px";
let mouseY = e.clientY + "px";
p.style.left = mouseX;
p.style.top = mouseY;
//console.log(mouseX);
document.getElementsByTagName('body')[0].appendChild(p);
}
};
selectDataTitle.forEach(function(item, i) {
selectDataTitle[i].addEventListener("mouseover", dataSetTool, false);
selectDataTitle[i].addEventListener('mousemove', dataSetTool, false);
selectDataTitle[i].addEventListener('mouseout', removeP);
});
});
/* * *
Part of the framweork.averin.pro
AverinElevator — Vanilla js plugin
Version: 1.0
Docs & Examples: https://framework.averin.pro/
*/
document.addEventListener('DOMContentLoaded', function(){
let elevator = document.querySelector('.elevator');
window.addEventListener('scroll', function() {
if (pageYOffset > 600) {
//elevator.style.opacity=1;
elevator.style='opacity: 1;visibility: visible;';
} else {
elevator.style = 'transition: opacity .4s, visibility 0s linear .4s;';
elevator.style.visibility ='hidden';
}
});
const scrollToTop = () => {
const c = document.documentElement.scrollTop || document.body.scrollTop;
if (c > 0) {
window.requestAnimationFrame(scrollToTop);
window.scrollTo(0, c - c / 10);
}
};
elevator.onclick = function(e) {
e.preventDefault();
scrollToTop();
}
});
/* *
Part of the framweork.averin.pro
AverinMessengers — Vanilla js plugin
Version: 1.0
Docs & Examples: https://framework.averin.pro/
*/
document.addEventListener('DOMContentLoaded', function(){
const amm_block_computer = document.querySelector('.amm_block_computer');
const amm_button = document.querySelector('.amm_button');
const amm_block_mobile = document.querySelector('.amm_block_mobile');
amm_button.addEventListener("click", () => {
if (window.innerWidth > 900) {
amm_block_mobile.style.display = "none";
amm_block_computer.style.display = "flex";
} else {
amm_block_mobile.style.display = "block";
amm_block_computer.style.display = "none";
}
amm_button.style.display = "none";
}, false);
function AverinMessengers(x){
x.addEventListener("click", function(){
x.style.display = "none";
amm_button.style.display = "inline-block";
}, false);
}
AverinMessengers(amm_block_computer);
AverinMessengers(amm_block_mobile);
AverinMessengers(document.querySelector('.amm_cancel'));
});
/*
Part of the framweork.averin.pro
AverinWindow — Vanilla js plugin
Version: 2.0
Docs & Examples: https://framework.averin.pro/
*/
document.addEventListener('click', function (e) {
if (e.target.classList.contains('averin_window_inner')) { return; } // пропускаем
if (!e.target.classList.contains('averin_window') && !e.target.classList.contains('averin_window_close')) { return; } // пропускаем
e.preventDefault();
AverinWindow_close();
return false;
});
document.addEventListener('click', function (e) {
if (!e.target.getAttribute('data-AverinWindow')) { return; } // пропускаем
e.preventDefault();
AverinWindow_open(e.target.getAttribute('data-AverinWindow'));
return false;
});
function AverinWindow_close() {
var $windows_open = document.querySelectorAll('.averin_window.open');
$windows_open.forEach(function($window_open){
$window_open.classList.remove('open');
});
document.body.style.overflow = 'auto';
}
function AverinWindow_open(window_id) {
var $window = document.getElementById(window_id);
if ($window.querySelectorAll('.averin_window_inner').length === 0) {
$inner = document.createElement('div');
$inner.classList.add('averin_window_inner');
$inner.innerHTML = '';
$inner.innerHTML += $window.innerHTML;
$window.innerHTML = "";
$window.appendChild($inner);
}
if (!$window.classList.contains('averin_window')) { $window.classList.add('averin_window'); }
document.body.style.overflow = 'hidden';
$window.classList.add('open');
$window.style = '';
}
document.onkeydown = function(evt) {
evt = evt || window.event;
var isEscape = false;
if ("key" in evt) {
isEscape = (evt.key === "Escape" || evt.key === "Esc");
} else {
isEscape = (evt.keyCode === 27);
}
if (!isEscape) { return }
if (document.querySelectorAll('.averin_window.open').length===0) { return }
AverinWindow_close();
};
/*
Part of the framweork.averin.pro
averinwindow — jQuery plugin
Base plugin: arcticModal — jQuery plugin Sergey Predvoditelev (sergey.predvoditelev@gmail.com) (http://arcticlab.ru/)
Version: 0.1
Docs & Examples: https://framework.averin.pro/
*/
(function($) {
if($.averinwindowconstructor !== 'function') {
var default_options = {
type: 'html', // ajax или html
content: '',
url: '',
ajax: {},
ajax_request: null,
closeOnEsc: true,
closeOnOverlayClick: true,
clone: false,
overlay: {
block: undefined,
tpl: '',
css: {
backgroundColor: '#000',
opacity: .6
}
},
container: {
block: undefined,
tpl: ''
},
wrap: undefined,
body: undefined,
errors: {
tpl: '',
autoclose_delay: 2000,
ajax_unsuccessful_load: 'Error'
},
openEffect: {
type: 'fade',
speed: 400
},
closeEffect: {
type: 'fade',
speed: 400
},
beforeOpen: $.noop,
afterOpen: $.noop,
beforeClose: $.noop,
afterClose: $.noop,
afterLoading: $.noop,
afterLoadingOnShow: $.noop,
errorLoading: $.noop
};
var modalID = 0;
var modals = $([]);
var utils = {
isEventOut: function(blocks, e) {
var r = true;
$(blocks).each(function() {
if ($(e.target).get(0)==$(this).get(0)) r = false;
if ($(e.target).closest('HTML', $(this).get(0)).length==0) r = false;
});
return r;
}
};
var modal = {
getParentEl: function(el) {
var r = $(el);
if (r.data('averinwindow')) return r;
r = $(el).closest('.averin-window-container').data('averinwindowParentEl');
if (r) return r;
return false;
},
transition: function(el, action, options, callback) {
callback = callback==undefined ? $.noop : callback;
switch (options.type) {
case 'fade':
action=='show' ? el.fadeIn(options.speed, callback) : el.fadeOut(options.speed, callback);
break;
case 'none':
action=='show' ? el.show() : el.hide();
callback();
break;
}
},
prepare_body: function(D, $this) {
// Обработчик закрытия
$('.close', D.body).unbind('click.averin-window').bind('click.averin-window', function() {
$this.averinwindow('close');
return false;
});
},
init_el: function($this, options) {
var D = $this.data('averinwindow');
if (D) return;
D = options;
modalID++;
D.modalID = modalID;
D.overlay.block = $(D.overlay.tpl);
D.overlay.block.css(D.overlay.css);
// Container
D.container.block = $(D.container.tpl);
// BODY
D.body = $('.averin-window-container_i2', D.container.block);
if (options.clone) {
D.body.html($this.clone(true));
} else {
$this.before('');
D.body.html($this);
}
// Подготовка содержимого
modal.prepare_body(D, $this);
// Закрытие при клике на overlay
if (D.closeOnOverlayClick)
D.overlay.block.add(D.container.block).click(function(e) {
if (utils.isEventOut($('>*', D.body), e))
$this.averinwindow('close');
});
// Запомним настройки
D.container.block.data('averinwindowParentEl', $this);
$this.data('averinwindow', D);
modals = $.merge(modals, $this);
// Показать
$.proxy(actions.show, $this)();
if (D.type=='html') return $this;
// Ajax-загрузка
if (D.ajax.beforeSend!=undefined) {
var fn_beforeSend = D.ajax.beforeSend;
delete D.ajax.beforeSend;
}
if (D.ajax.success!=undefined) {
var fn_success = D.ajax.success;
delete D.ajax.success;
}
if (D.ajax.error!=undefined) {
var fn_error = D.ajax.error;
delete D.ajax.error;
}
var o = $.extend(true, {
url: D.url,
beforeSend: function() {
if (fn_beforeSend==undefined) {
D.body.html('');
} else {
fn_beforeSend(D, $this);
}
},
success: function(responce) {
// Событие после загрузки до показа содержимого
$this.trigger('afterLoading');
D.afterLoading(D, $this, responce);
if (fn_success==undefined) {
D.body.html(responce);
} else {
fn_success(D, $this, responce);
}
modal.prepare_body(D, $this);
// Событие после загрузки после отображения содержимого
$this.trigger('afterLoadingOnShow');
D.afterLoadingOnShow(D, $this, responce);
},
error: function() {
// Событие при ошибке загрузки
$this.trigger('errorLoading');
D.errorLoading(D, $this);
if (fn_error==undefined) {
D.body.html(D.errors.tpl);
$('.averin-window-error', D.body).html(D.errors.ajax_unsuccessful_load);
$('.close', D.body).click(function() {
$this.averinwindow('close');
return false;
});
if (D.errors.autoclose_delay)
setTimeout(function() {
$this.averinwindow('close');
}, D.errors.autoclose_delay);
} else {
fn_error(D, $this);
}
}
}, D.ajax);
D.ajax_request = $.ajax(o);
// Запомнить настройки
$this.data('averinwindow', D);
},
// Инициализация
init: function(options) {
options = $.extend(true, {}, default_options, options);
if ($.isFunction(this)) {
if (options==undefined) {
$.error('jquery.averinwindow: Uncorrect parameters');
return;
}
if (options.type=='') {
$.error('jquery.averinwindow: Don\'t set parameter "type"');
return;
}
switch (options.type) {
case 'html':
if (options.content=='') {
$.error('jquery.averinwindow: Don\'t set parameter "content"');
return
}
var c = options.content;
options.content = '';
return modal.init_el($(c), options);
break;
case 'ajax':
if (options.url=='') {
$.error('jquery.averinwindow: Don\'t set parameter "url"');
return;
}
return modal.init_el($(''), options);
break;
}
} else {
return this.each(function() {
modal.init_el($(this), $.extend(true, {}, options));
});
}
}
};
var actions = {
// Показать
show: function() {
var $this = modal.getParentEl(this);
if ($this===false) {
$.error('jquery.averinwindow: Uncorrect call');
return;
}
var D = $this.data('averinwindow');
// Добавить overlay и container
D.overlay.block.hide();
D.container.block.hide();
$('BODY').append(D.overlay.block);
$('BODY').append(D.container.block);
// Событие
D.beforeOpen(D, $this);
$this.trigger('beforeOpen');
// Wrap
if (D.wrap.css('overflow')!='hidden') {
D.wrap.data('averinwindowOverflow', D.wrap.css('overflow'));
var w1 = D.wrap.outerWidth(true);
D.wrap.css('overflow', 'hidden');
var w2 = D.wrap.outerWidth(true);
if (w2!=w1)
D.wrap.css('marginRight', (w2 - w1) + 'px');
}
// Скрыть предыдущие оверлеи
modals.not($this).each(function() {
var d = $(this).data('averinwindow');
d.overlay.block.hide();
});
// Показать
modal.transition(D.overlay.block, 'show', modals.length>1 ? {type: 'none'} : D.openEffect);
modal.transition(D.container.block, 'show', modals.length>1 ? {type: 'none'} : D.openEffect, function() {
D.afterOpen(D, $this);
$this.trigger('afterOpen');
});
return $this;
},
// Закрыть
close: function() {
if ($.isFunction(this)) {
modals.each(function() {
$(this).averinwindow('close');
});
} else {
return this.each(function() {
var $this = modal.getParentEl(this);
if ($this===false) {
$.error('jquery.averinwindow: Uncorrect call');
return;
}
var D = $this.data('averinwindow');
// Событие перед закрытием
if (D.beforeClose(D, $this)===false) return;
$this.trigger('beforeClose');
// Показать предыдущие оверлеи
modals.not($this).last().each(function() {
var d = $(this).data('averinwindow');
d.overlay.block.show();
});
modal.transition(D.overlay.block, 'hide', modals.length>1 ? {type: 'none'} : D.closeEffect);
modal.transition(D.container.block, 'hide', modals.length>1 ? {type: 'none'} : D.closeEffect, function() {
// Событие после закрытия
D.afterClose(D, $this);
$this.trigger('afterClose');
// Если не клонировали - вернём на место
if (!D.clone)
$('#averin-windowReserve' + D.modalID).replaceWith(D.body.find('>*'));
D.overlay.block.remove();
D.container.block.remove();
$this.data('averinwindow', null);
if (!$('.averin-window-container').length) {
if (D.wrap.data('averinwindowOverflow'))
D.wrap.css('overflow', D.wrap.data('averinwindowOverflow'));
D.wrap.css('marginRight', 0);
}
});
if (D.type=='ajax')
D.ajax_request.abort();
modals = modals.not($this);
});
}
},
// Установить опции по-умолчанию
setDefault: function(options) {
$.extend(true, default_options, options);
}
};
$(function() {
default_options.wrap = $((document.all && !document.querySelector) ? 'html' : 'body');
});
// Закрытие при нажатии Escape
$(document).bind('keyup.averinwindow', function(e) {
var m = modals.last();
if (!m.length) return;
var D = m.data('averinwindow');
if (D.closeOnEsc && (e.keyCode===27))
m.averinwindow('close');
});
$.averinwindow = $.fn.averinwindow = function(method) {
if (actions[method]) {
return actions[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method==='object' || !method) {
return modal.init.apply(this, arguments);
} else {
$.error('jquery.averinwindow: Method ' + method + ' does not exist');
}
};
}
})(jQuery);