-
Notifications
You must be signed in to change notification settings - Fork 2
/
QBox.js
119 lines (90 loc) · 2.68 KB
/
QBox.js
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
// QuickBox
var QBox = (function(){
// Private Static functions
function extend(toObject, fromObject){
for(o in fromObject){
if(fromObject.hasOwnProperty(o) ){
toObject[o] = fromObject[o];
}
}
return toObject;
}
function makeElement(clazz, parentElemSelector){ // This was more usefull when IDs were used
var parentElem = parentElemSelector ? document.querySelector("." + parentElemSelector) : document.body;
elem = document.createElement("div");
elem.className = clazz;
parentElem.insertBefore(elem, parentElem.firstChild);
return elem;
}
var maskClass = "qb-mask",
contentClass = "qb-content",
closeClass = "qb-close",
blurBackgroundClass = "qb-blur-background",
autoCenterClass = "qb-auto-center";
return function(options){
// Customizable Settings
var settings = {
html : "",
modal : false, // Will clicking the mask close the popup
showClose : true, // Show the 'X' in the corner of the popup
onOpen : function(){}, // Fires when qbox is opened
onClose : function(){}, // Fires when qbox is closed
className : "", // Class name to override content styles
closeHTML : "×",
autoCenter : true,
blurBackground : false,
shrinkToFit : false
};
// Private Attributes
var mask,
content,
closeButton;
// Run when class is instantiated
extend(settings, options);
// Private Class Methods
function createMask(){
mask = makeElement(maskClass);
mask.style.display = "block";
if( settings.blurBackground ) mask.className += (" " + blurBackgroundClass);
}
function createContent(){
content = makeElement(contentClass, maskClass);
content.style.display = settings.shrinkToFit ? "inline-block" : "block";
content.className += (" " + settings.className);
if( settings.autoCenter ) content.className += (" " + autoCenterClass);
content.innerHTML = settings.html;
}
function createCloseButton(){
closeButton = makeElement(closeClass, contentClass);
closeButton.onclick = function(){
hidePopup();
}
closeButton.innerHTML = settings.closeHTML;
}
function showPopup(){
createMask();
if( !settings.modal ){
mask.onclick = function(e){
if( e.target === mask || e.target === closeButton ){
hidePopup();
}
}
}
createContent();
if( settings.showClose ) createCloseButton();
settings.onOpen(this);
}
function hidePopup(){
// Hide Mask
var maskParent = mask.parentNode;
if(maskParent) maskParent.removeChild(mask);
settings.onClose(this);
}
// Public Class Methods
this.show = showPopup;
this.hide = hidePopup;
this.settings = function(){
return settings;
}
};
})();