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(document.currentPopupMenu);
128 var menuTop = Event.pointerY(event);
129 var menuLeft = Event.pointerX(event);
130 var heightDiff = (window.height()
131 - (menuTop + popup.offsetHeight));
133 menuTop += heightDiff;
135 var leftDiff = (window.width()
136 - (menuLeft + popup.offsetWidth));
138 menuLeft -= popup.offsetWidth;
140 if (popup.prepareVisibility)
141 popup.prepareVisibility();
143 popup.setStyle( { top: menuTop + "px",
144 left: menuLeft + "px",
145 visibility: "visible" } );
147 document.currentPopupMenu = popup;
148 Event.observe(document.body, "click", onBodyClickMenuHandler);
151 attachMenu: function(element, menuName) {
152 element = $(element);
153 element.sogoContextMenu = $(menuName);
154 Event.observe(element, "contextmenu",
155 element.onContextMenu.bindAsEventListener(element));
158 select: function(element) {
159 element = $(element);
160 element.addClassName('_selected');
163 selectRange: function(element, startIndex, endIndex) {
164 element = $(element);
169 if (startIndex > endIndex) {
177 if (element.tagName == 'UL')
178 rows = element.getElementsByTagName('LI');
180 rows = element.getElementsByTagName('TR');
182 if (rows[s].nodeType == 1)
188 deselect: function(element) {
189 element = $(element);
190 element.removeClassName('_selected');
193 deselectAll: function(element) {
194 element = $(element);
195 for (var i = 0; i < element.childNodes.length; i++) {
196 var node = element.childNodes.item(i);
197 if (node.nodeType == 1)
202 setCaretTo: function(element, pos) {
203 element = $(element);
204 if (element.selectionStart) { // For Mozilla and Safari
206 element.setSelectionRange(pos, pos);
208 else if (element.createTextRange) { // For IE
209 var range = element.createTextRange();
210 range.move("character", pos);
215 selectText: function(element, start, end) {
216 element = $(element);
217 if (element.setSelectionRange) { // For Mozilla and Safari
218 element.setSelectionRange(start, end);
220 else if (element.createTextRange) { // For IE
221 var textRange = element.createTextRange();
222 textRange.moveStart("character", start);
223 textRange.moveEnd("character", end-element.value.length);