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 getParentWithTagName: function(element, tagName) {
28 var currentElement = element;
29 tagName = tagName.toUpperCase();
31 currentElement = currentElement.parentNode;
33 && currentElement.tagName != tagName) {
34 currentElement = currentElement.parentNode;
37 return currentElement;
40 cascadeLeftOffset: function(element) {
42 var currentElement = element;
45 while (currentElement) {
46 offset += currentElement.offsetLeft;
47 currentElement = currentElement.getParentWithTagName("div");
53 cascadeTopOffset: function(element) {
55 var currentElement = element;
60 while (currentElement && currentElement.tagName) {
61 offset += currentElement.offsetTop;
62 currentElement = currentElement.parentNode;
69 dump: function(element, additionalInfo, additionalKeys) {
71 var id = element.getAttribute("id");
72 var nclass = element.getAttribute("class");
74 var str = element.tagName;
76 str += "; id = " + id;
78 str += "; class = " + nclass;
81 str += "; " + additionalInfo;
84 for (var i = 0; i < additionalKeys.length; i++) {
85 var value = element.getAttribute(additionalKeys[i]);
87 str += "; " + additionalKeys[i] + " = " + value;
93 getSelectedNodes: function(element) {
95 var selArray = new Array();
97 for (var i = 0; i < element.childNodes.length; i++) {
98 node = element.childNodes.item(i);
99 if (node.nodeType == 1
100 && isNodeSelected(node))
107 getSelectedNodesId: function(element) {
108 element = $(element);
109 var selArray = new Array();
111 for (var i = 0; i < element.childNodes.length; i++) {
112 node = element.childNodes.item(i);
113 if (node.nodeType == 1
114 && isNodeSelected(node)) {
115 selArray.push(node.getAttribute("id")); }
121 onContextMenu: function(element, event) {
122 element = $(element);
123 var popup = element.sogoContextMenu;
125 if (document.currentPopupMenu)
126 hideMenu(event, document.currentPopupMenu);
128 var menuTop = event.pageY;
129 var menuLeft = event.pageX;
130 var heightDiff = (window.innerHeight
131 - (menuTop + popup.offsetHeight));
133 menuTop += heightDiff;
135 var leftDiff = (window.innerWidth
136 - (menuLeft + popup.offsetWidth));
138 menuLeft -= popup.offsetWidth;
140 popup.setStyle( { top: menuTop + "px",
141 left: menuLeft + "px",
142 visibility: "visible" } );
144 document.currentPopupMenu = popup;
145 Event.observe(document.body, "click", onBodyClickMenuHandler);
148 attachMenu: function(element, menuName) {
149 element = $(element);
150 element.sogoContextMenu = $(menuName);
151 Event.observe(element, "contextmenu", element.onContextMenu.bindAsEventListener(element));
154 select: function(element) {
155 element = $(element);
156 element.addClassName('_selected');
159 deselect: function(element) {
160 element = $(element);
161 element.removeClassName('_selected');
164 deselectAll: function(element) {
165 element = $(element);
166 for (var i = 0; i < element.childNodes.length; i++) {
167 var node = element.childNodes.item(i);
168 if (node.nodeType == 1)