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 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",
152 element.onContextMenu.bindAsEventListener(element));
155 select: function(element) {
156 element = $(element);
157 element.addClassName('_selected');
160 selectRange: function(element, startIndex, endIndex) {
161 element = $(element);
166 if (startIndex > endIndex) {
174 if (element.tagName == 'UL')
175 rows = element.getElementsByTagName('LI');
177 rows = element.getElementsByTagName('TR');
179 if (rows[s].nodeType == 1)
185 deselect: function(element) {
186 element = $(element);
187 element.removeClassName('_selected');
190 deselectAll: function(element) {
191 element = $(element);
192 for (var i = 0; i < element.childNodes.length; i++) {
193 var node = element.childNodes.item(i);
194 if (node.nodeType == 1)
199 setCaretTo: function(element, pos) {
200 element = $(element);
201 if (element.selectionStart) { // For Mozilla and Safari
203 element.setSelectionRange(pos, pos);
205 else if (element.createTextRange) { // For IE
206 var range = element.createTextRange();
207 range.move("character", pos);
212 selectText: function(element, start, end) {
213 element = $(element);
214 if (element.setSelectionRange) { // For Mozilla and Safari
215 element.setSelectionRange(start, end);
217 else if (element.createTextRange) { // For IE
218 var textRange = element.createTextRange();
219 textRange.moveStart("character", start);
220 textRange.moveEnd("character", end-element.value.length);