-
Notifications
You must be signed in to change notification settings - Fork 29
/
panelset.js
82 lines (75 loc) · 2.37 KB
/
panelset.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
/*
* Ample SDK - JavaScript GUI Framework
*
* Copyright (c) 2012 Sergey Ilinsky
* Dual licensed under the MIT and GPL licenses.
* See: http://www.amplesdk.com/about/licensing/
*
*/
var cAUIElement_panelset = function(){};
cAUIElement_panelset.prototype = new cAUIElement("panelset");
cAUIElement_panelset.handlers = {
"DOMAttrModified": function(oEvent) {
if (oEvent.target == this) {
switch (oEvent.attrName) {
case "cols":
case "rows":
this.refresh();
break;
}
}
},
"DOMNodeInsertedIntoDocument": function(oEvent) {
this.refresh();
// register document resize event
var that = this;
this.ownerDocument.addEventListener("resize", function() {
that.refresh();
}, false);
}
};
cAUIElement_panelset.prototype.refresh = function() {
var aSize = [],
nFlex = 0,
nSize = 0,
nPanelsetSize = 0,
bVertical = false,
oElement;
if (this.hasAttribute("rows")) {
aSize = this.getAttribute("rows").replace(/^\s+|\s+$/g, '').split(/\s+/);
nPanelsetSize = this.$getContainer().offsetHeight;
bVertical = true;
}
else
if (this.hasAttribute("cols")) {
aSize = this.getAttribute("cols").replace(/^\s+|\s+$/g, '').split(/\s+/);
nPanelsetSize = this.$getContainer().offsetWidth;
bVertical = false;
}
//
for (var nIndex = 0; nIndex < this.childNodes.length; nIndex++) {
if (aSize[nIndex].match(/(\d*)\*/))
nFlex +=(RegExp.$1 || 1)* 1;
else {
oElement = this.childNodes[nIndex].$getContainer();
oElement.style[bVertical ? "height" : "width"] = aSize[nIndex];
nSize += oElement[bVertical ? "offsetHeight" : "offsetWidth"];
}
}
//
for (var nIndex = 0, nOffset = 0; nIndex < this.childNodes.length; nIndex++) {
if (aSize[nIndex].match(/(\d*)\*/))
this.childNodes[nIndex].$getContainer().style[bVertical ? "height" : "width"] = Math.floor((nPanelsetSize - nSize)*(RegExp.$1 || 1)/ nFlex - 2)+ "px";
}
};
// Renderers
cAUIElement_panelset.prototype.$getTagOpen = function()
{
return '<div class="aui-panelset' + (this.hasAttribute("rows") ? ' aui-panelset-rows-' : this.hasAttribute("cols") ? ' aui-panelset-cols-' : '')+ '"' + (this.attributes["style"] ? ' style="' + this.attributes["style"] + '"' : '') + '>';
};
cAUIElement_panelset.prototype.$getTagClose = function()
{
return '</div>';
};
// Register Element
ample.extend(cAUIElement_panelset);