]> err.no Git - scalable-opengroupware.org/blob - UI/WebServerResources/HTMLElement.js
46f4c54e6601111509cb4ada2504f891a9960ed8
[scalable-opengroupware.org] / UI / WebServerResources / HTMLElement.js
1 /* custom extensions to the DOM api */
2 Element.addMethods({
3
4   addInterface: function(element, objectInterface) {
5     element = $(element);
6     Object.extend(element, objectInterface);
7     if (element.bind)
8       element.bind();
9   },
10
11   childNodesWithTag: function(element, tagName) {
12     element = $(element);
13     var matchingNodes = new Array();
14     var tagName = tagName.toUpperCase();
15     
16     for (var i = 0; i < element.childNodes.length; i++) {
17       if (typeof(element.childNodes[i]) == "object"
18           && element.childNodes[i].tagName
19           && element.childNodes[i].tagName.toUpperCase() == tagName)
20         matchingNodes.push(element.childNodes[i]);
21     }
22
23     return matchingNodes;
24   },
25
26   removeClassName: function(element, className) {
27     element = $(element);
28     var classStr = '' + element.readAttribute('class');
29
30     position = classStr.indexOf(className, 0);
31     while (position > -1) {
32       classStr1 = classStr.substring(0, position); 
33       classStr2 = classStr.substring(position + 10, classStr.length);
34       classStr = classStr1 + classStr2;
35       position = classStr.indexOf(className, 0);
36     }
37     
38     element.setAttribute('class', classStr);
39   },
40
41   getParentWithTagName: function(element, tagName) {
42     element = $(element);
43     var currentElement = element;
44     tagName = tagName.toUpperCase();
45     
46     currentElement = currentElement.parentNode;
47     while (currentElement
48            && currentElement.tagName != tagName) {
49       currentElement = currentElement.parentNode;
50     }
51     
52     return currentElement;
53   },
54
55   cascadeLeftOffset: function(element) {
56     element = $(element);
57     var currentElement = element;
58     
59     var offset = 0;
60     while (currentElement) {
61       offset += currentElement.offsetLeft;
62       currentElement = currentElement.getParentWithTagName("div");
63     }
64     
65     return offset;
66   },
67
68   cascadeTopOffset: function(element) {
69     element = $(element);
70     var currentElement = element;
71     var offset = 0;
72     
73     var i = 0;
74     
75     while (currentElement && currentElement.tagName) {
76       offset += currentElement.offsetTop;
77       currentElement = currentElement.parentNode;
78       i++;
79     }
80     
81     return offset;
82   },
83  
84   dump: function(element, additionalInfo, additionalKeys) {
85     element = $(element);
86     var id = element.getAttribute("id");
87     var nclass = element.getAttribute("class");
88     
89     var str = element.tagName;
90     if (id)
91       str += "; id = " + id;
92     if (nclass)
93       str += "; class = " + nclass;
94     
95     if (additionalInfo)
96       str += "; " + additionalInfo;
97     
98     if (additionalKeys)
99       for (var i = 0; i < additionalKeys.length; i++) {
100         var value = element.getAttribute(additionalKeys[i]);
101         if (value)
102           str += "; " + additionalKeys[i] + " = " + value;
103       }
104     
105     log (str);
106   },
107
108   getSelectedNodes: function(element) {
109     element = $(element);
110     var selArray = new Array();
111     
112     for (var i = 0; i < element.childNodes.length; i++) {
113       node = element.childNodes.item(i);
114       if (node.nodeType == 1
115           && isNodeSelected(node))
116         selArray.push(node);
117     }
118     
119     return selArray;
120   },
121
122   getSelectedNodesId: function(element) {
123     element = $(element);
124     var selArray = new Array();
125     
126     for (var i = 0; i < element.childNodes.length; i++) {
127       node = element.childNodes.item(i);
128       if (node.nodeType == 1
129           && isNodeSelected(node))
130         selArray.push(node.getAttribute("id"));
131     }
132
133     return selArray;
134   },
135
136   onContextMenu: function(element, event) {
137     element = $(element);
138     var popup = element.sogoContextMenu;
139
140     if (document.currentPopupMenu)
141       hideMenu(event, document.currentPopupMenu);
142     
143     var menuTop = event.pageY;
144     var menuLeft = event.pageX;
145     var heightDiff = (window.innerHeight
146                       - (menuTop + popup.offsetHeight));
147     if (heightDiff < 0)
148       menuTop += heightDiff;
149     
150     var leftDiff = (window.innerWidth
151                     - (menuLeft + popup.offsetWidth));
152     if (leftDiff < 0)
153       menuLeft -= popup.offsetWidth;
154
155     popup.setStyle( { top: menuTop + "px",
156                       left: menuLeft + "px",
157                       visibility: "visible" } );
158     
159     document.currentPopupMenu = popup;
160     Event.observe(document.body, "click", onBodyClickMenuHandler);
161   },
162
163   attachMenu: function(element, menuName) {
164     element = $(element);
165     element.sogoContextMenu = $(menuName);
166     Event.observe(element, "contextmenu", element.onContextMenu.bindAsEventListener(element));
167   },
168
169   select: function(element) {
170     element = $(element);
171     element.addClassName('_selected');
172   },
173
174   deselect: function(element) {
175     element = $(element);
176     element.removeClassName('_selected');
177   },
178
179   deselectAll: function(element) {
180     element = $(element);
181     for (var i = 0; i < element.childNodes.length; i++) {
182       var node = element.childNodes.item(i);
183       if (node.nodeType == 1)
184         node.deselect();
185     }
186   }
187
188 });