-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathtinybox.js
More file actions
178 lines (140 loc) · 5.39 KB
/
Copy pathtinybox.js
File metadata and controls
178 lines (140 loc) · 5.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/**
* Вывести контейнер на черном фоне в центре экрана
*/
var tinybox = function (selector, oneClickClose, darkBackground, deleteOnOneClickClose, deleteHandler) {
var tinyboxObj = {};
// Safely get object
selector = s(selector);
// If we have dom elements found
if (!selector.length) return;
// Work with first element
selector = selector.elements[0];
// Add tinybox class
selector.addClass('__samsonjs-tinybox-popup');
// Create BG
var bg_str = '<div class="sjs-lightbox-bg" style="display:none;position:fixed;';
if (darkBackground !== undefined && darkBackground == false) {
bg_str += 'background-color: transparent;';
}
bg_str += '"></div>';
var bg_container = s(bg_str);
// Append BG
s(document.body).append(bg_container);
/**
* Обработчик пересчета позиции элемента
*/
tinyboxObj.calculate = function () {
// Получим размеры контейнера
var lb_width = selector.width();
var lb_height = selector.height();
// Получим размеры документа
var bd_width = s.pageWidth();
var bd_height = s.pageHeight();
// Рассчитаем новые "центровые" координаты
var lb_top = (bd_height - lb_height) / 2;
var lb_left = (bd_width - lb_width) / 2;
if (lb_top < 0) lb_top = 0;
// Разместим наш контейнер по новім координатам
selector.top(lb_top + "px");
selector.left(lb_left + "px");
// Рассчитаем высоту контейнера фона
bg_container_height = s(document.body).height() + 1000;
// Изменим размер контейнера "темного" фона
bg_container.height(bg_container_height + "px");
};
/** Обработчик удаления "коробочки" */
tinyboxObj.close = tinyboxObj._close = function () {
// Уничтожем фоновый контейнер
bg_container.remove();
// Офистим флаг отображения блока
tinyboxObj.shown = undefined;
// Уничтожем сам элемент
selector.remove();
if (deleteHandler !== undefined) {
deleteHandler();
}
// unFix body
//s(document.body).css('position','');
//s.pageScrollTop(tinyboxObj.scrollTop);
};
/** Обработчик прятания "коробочки" */
tinyboxObj.hide = tinyboxObj._hide = function () {
// Уничтожем фоновый контейнер
bg_container.hide();
// Офистим флаг отображения блока
this.shown = false;
// Уничтожем сам элемент
selector.hide();
if (deleteHandler !== undefined) {
deleteHandler();
}
// unFix body
//s(document.body).css('position','');
//s.pageScrollTop(tinyboxObj.scrollTop);
};
/** Обработчик отображения "коробочки" */
tinyboxObj.show = tinyboxObj._show = function () {
// show bg
bg_container.show();
// Fix box
selector.css('position', 'fixed');
// On top
selector.css('z-index', '999');
// Show box
selector.show();
// Calculate size and pos
tinyboxObj.calculate();
};
// Window resize handler
window.onresize = tinyboxObj.calculate;
// Closer
s('.close-button', selector).click(
deleteOnOneClickClose ? tinyboxObj.close : tinyboxObj.hide,
true,
true
);
// If we must close TB on click anywhere else
if (oneClickClose) {
// Повесим обработчик для закрытия
s('html').click(function (obj, opt, e) {
if (tbCheckCloseEvent(e)) {
if (deleteOnOneClickClose) {
tinyboxObj.close();
} else {
tinyboxObj.hide();
}
}
});
s('html').DOMElement.addEventListener("touchend", function (e) {
if (tbCheckCloseEvent(e)) {
if (deleteOnOneClickClose) {
tinyboxObj.close();
} else {
tinyboxObj.hide();
}
}
}, false);
s('html').keyup(function (search, params, e) {
if (e.keyCode == 27) {
if (deleteOnOneClickClose) {
tinyboxObj.close();
} else {
tinyboxObj.hide();
}
}
});
}
function tbCheckCloseEvent(e) {
// Получим элемент на который нажали
var clickedElement = s(e.srcElement || e.originalTarget);
// Если мы нажали НЕ на наш контейнер - закроем
if (clickedElement != undefined && !clickedElement.hasClass('__samsonjs-tinybox-popup') && !clickedElement.parent('__samsonjs-tinybox-popup').hasClass('__samsonjs-tinybox-popup')) {
return true;
}
return false;
}
// Show tinybox
tinyboxObj._show();
// Вернем указатель на себя
return tinyboxObj;
};