1 /* custom extensions to the DOM api */
4 addInterface: function(element, objectInterface) {
6 Object.extend(element, objectInterface);
11 childNodesWithTag: function(element, tagName) {
13 var matchingNodes = new Array();
14 var tagName = tagName.toUpperCase();
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]);
26 removeClassName: function(element, className) {
28 var classStr = '' + element.readAttribute('class');
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);
38 element.setAttribute('class', classStr);
41 getParentWithTagName: function(element, tagName) {
43 var currentElement = element;
44 tagName = tagName.toUpperCase();
46 currentElement = currentElement.parentNode;
48 && currentElement.tagName != tagName) {
49 currentElement = currentElement.parentNode;
52 return currentElement;
55 cascadeLeftOffset: function(element) {
57 var currentElement = element;
60 while (currentElement) {
61 offset += currentElement.offsetLeft;
62 currentElement = currentElement.getParentWithTagName("div");
68 cascadeTopOffset: function(element) {
70 var currentElement = element;
75 while (currentElement && currentElement.tagName) {
76 offset += currentElement.offsetTop;
77 currentElement = currentElement.parentNode;
84 dump: function(element, additionalInfo, additionalKeys) {
86 var id = element.getAttribute("id");
87 var nclass = element.getAttribute("class");
89 var str = element.tagName;
91 str += "; id = " + id;
93 str += "; class = " + nclass;
96 str += "; " + additionalInfo;
99 for (var i = 0; i < additionalKeys.length; i++) {
100 var value = element.getAttribute(additionalKeys[i]);
102 str += "; " + additionalKeys[i] + " = " + value;
108 getSelectedNodes: function(element) {
109 element = $(element);
110 var selArray = new Array();
112 for (var i = 0; i < element.childNodes.length; i++) {
113 node = element.childNodes.item(i);
114 if (node.nodeType == 1
115 && isNodeSelected(node))
122 getSelectedNodesId: function(element) {
123 element = $(element);
124 var selArray = new Array();
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"));
136 onContextMenu: function(element, event) {
137 element = $(element);
138 var popup = element.sogoContextMenu;
140 if (document.currentPopupMenu)
141 hideMenu(event, document.currentPopupMenu);
143 var menuTop = event.pageY;
144 var menuLeft = event.pageX;
145 var heightDiff = (window.innerHeight
146 - (menuTop + popup.offsetHeight));
148 menuTop += heightDiff;
150 var leftDiff = (window.innerWidth
151 - (menuLeft + popup.offsetWidth));
153 menuLeft -= popup.offsetWidth;
155 popup.setStyle( { top: menuTop + "px",
156 left: menuLeft + "px",
157 visibility: "visible" } );
159 document.currentPopupMenu = popup;
160 Event.observe(document.body, "click", onBodyClickMenuHandler);
163 attachMenu: function(element, menuName) {
164 element = $(element);
165 element.sogoContextMenu = $(menuName);
166 Event.observe(element, "contextmenu", element.onContextMenu.bindAsEventListener(element));
169 select: function(element) {
170 element = $(element);
171 element.addClassName('_selected');
174 deselect: function(element) {
175 element = $(element);
176 element.removeClassName('_selected');
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)