-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathddpanel.js
81 lines (80 loc) · 2.1 KB
/
ddpanel.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
/**
* GDPanel
* Javascript dropdown panel
*
* @filesource js/gdpanel.js
* @link https://www.kotchasan.com/
* @copyright 2016 Goragod.com
* @license https://www.kotchasan.com/license/
*/
(function() {
"use strict";
var GDPanels = [];
var gdpanels_len = 0;
window.GDPanel = GClass.create();
GDPanel.prototype = {
initialize: function(a, div, prefix) {
this.prefix = prefix || "gdpanel";
var self = this;
$E(div).className = this.prefix + " " + this.prefix + gdpanels_len;
$E(a).className = this.prefix + "-arrow " + this.prefix + gdpanels_len;
gdpanels_len++;
GDPanels[a] = div;
callClick(a, function() {
self.show(this);
return false;
});
function _isPanel(src) {
var c,
tag = src.tagName.toLowerCase();
var test = self.prefix + " gcalendar gddcolor " + self.prefix + "-arrow";
while (src && src != document.body) {
c = $G(src).hasClass(test);
if (c) {
return c == self.prefix + "-arrow" ||
c == "gcalendar" ||
c == "gddcolor" ||
tag == "input" ||
tag == "select" ||
tag == "textarea" ||
tag == "label" ||
tag == "button" ?
src :
null;
} else {
src = src.parentNode;
}
}
return null;
}
$G(document.body).addEvent("click", function(e) {
if (_isPanel(GEvent.element(e)) === null) {
self.show(null);
}
});
},
show: function(src) {
var c = "",
a,
div;
if (src) {
c = src.className.replace(this.prefix + "-arrow ", this.prefix + " ");
}
for (a in GDPanels) {
div = $E(GDPanels[a]);
if (div) {
if (div.className == c) {
$G(a).addClass("hover");
$G(div).addClass("show");
} else {
$G(a).removeClass("hover");
$G(div).removeClass("show");
}
}
}
},
hide: function() {
this.show(null);
}
};
})();